こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2007のVBAで文字列を結合

Excel2007のマクロで文字列を結合したいのですがうまくいきません。
下記がお題になります
1、セルA1からU1までデータが1つずつ入ってます。

2、1のデータを3列ずつ結合してA3からG3にコピー。

例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。

投稿日時 - 2018-05-11 05:57:46

QNo.9497251

すぐに回答ほしいです

質問者が選んだベストアンサー

A1:U1をM27:AG27にする場合、コピー先をM29にするとしたら
=INDEX($M27:$AG27,1,COLUMN(A3)*3-2)&INDEX($M27:$AG27,1,COLUMN(A3)*3-1)&INDEX($M27:$AG27,1,COLUMN(A3)*3)
です。
A3を使っているのが不思議に思うかもしれませんが、COLUMNは列を返す関数です。
Aなら1
Bなら2 を返します。したがって、
COLUMN(A3)*3-2 = 1
COLUMN(A3)*3-1 = 2
COLUMN(A3)*3 = 3
COLUMN(B3)*3-2 = 4
COLUMN(B3)*3-1 = 5
COLUMN(B3)*3 = 6
になるわけです。横にコピペした時にカウントアップしたい場合使うテクニックです。
また、3 はこの関数に関係なく、何でも構いません。1 にしても、29にしても同じです。

どうしても、M29 を使いたいのであれば
COLUMN(M29)*3 = 39
なので、
=INDEX($M27:$AG27,1,COLUMN(M29)*3-38)&INDEX($M27:$AG27,1,COLUMN(M29)*3-37)&INDEX($M27:$AG27,1,COLUMN(M29)*3-36)
になります。

投稿日時 - 2018-05-11 11:21:38

お礼

できました。1週間悩んでたのが初めての質問でこんなにあっさりと…。for each とdo whileを併せたりと…。それでもできない。やっぱり凄い人はそれだけ鍛え上げたんだろうなぁ。恐れ入ります。また質問すると思うので機会があればお助けお願いします。今回はありがとうございました。

投稿日時 - 2018-05-11 12:19:49

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

何故 そんなややこしく考える必要があるのでしょう。

A3に「=A1&B1&C1」と入力
A3:C3を選択して U3までコピー
その状態のまま F5キー→[セル選択]→[空白セル]を選択して[OK]
右クリック[削除]→[左方向にシフト]

以上でいいでしょう。

投稿日時 - 2018-05-11 15:03:41

お礼

ありがとうございました。

投稿日時 - 2018-05-12 02:16:34

ANo.3

あまり難しく考えず。

Sub sample()
  Rows(3).ClearContents
  For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
    n = WorksheetFunction.Ceiling(i, 3) / 3
    Cells(3, n) = Cells(3, n) & Cells(1, i)
  Next
End Sub

質問なさるときは
> (略)うまくいきません。
では状況がつかめません。
具体的に
・何をどうしてみた
・欲しい結果はこうだが、試した結果はこうなった
などなど分かればアドバイスはしやすいですね。
じゃないと、回答が質問者さんに伝わるかどうか判断できないので。

投稿日時 - 2018-05-11 13:05:21

お礼

ご解答ありがとうございます。逆の場合はどのようにしたらよろしいですか?
例えば、A3あいう→A1あ、B1い、C1う
のようにマクロでなんですが。

投稿日時 - 2018-05-11 16:36:01

ANo.1

2種類作りました。
Macro1は簡単ですが、3つではなく、もっと増えると大変になります。
お好きな方をどうぞ。
'
Option Explicit
'
Sub Macro1()
'
  Dim ColI As Integer
  Dim ColO As Integer
  ColI = 1
'
  For ColO = 1 To 7
    Cells(3, ColO) = Cells(1, ColI) & Cells(1, ColI + 1) & Cells(1, ColI + 2)
    ColI = ColI + 3
  Next ColO
End Sub
'
Sub Macro2()
'
  Dim ColI As Integer
  Dim ColO As Integer
  Dim OutData As String
'
  For ColO = 1 To 7
    OutData = ""
'
    For ColI = ColO * 3 - 2 To ColO * 3
      OutData = OutData & Cells(1, ColI)
    Next ColI
    Cells(3, ColO) = OutData
   Next ColO
End Sub

今回、質問のやり直しの必要はなかったと思います。
どうしてもやり直したいのなら、前の質問を締め切ってからにして下さい。
「関数でなく、マクロでお願いします」など、書いておいかないと質問をやり直す意味がありません。
ほとんどの人が、関数でできるのならその方がいいと考えています。今までの回答経験で、マクロと書いてあっても関数で答えた方が喜んでくれました。
だから、きちんと書いてないと、関数による回答が来る可能性があります。

参考URL:https://okwave.jp/qa/q9497246.html

投稿日時 - 2018-05-11 07:34:53

補足

あっ失礼しました。随分と前に一応はと登録はしておりましたが、今回このサイトを利用するのが初めてで解答者さんにコメントという形がはっきり理解してなかったものですから返事する手段が必要と思いこのような形になってしまいました。ここまでしていただいて本当にありがとうございます。

投稿日時 - 2018-05-11 08:28:56

お礼

スッ凄い。なんか申し訳なく思います。本当に助かります。先ほどの関数の場合の分ですがあれを
A1:U1を
M27:AG27にする場合、コピー先をM29にするとしたら
=INDEX($M27:$AG27,1,column(M29)*3ー2)
等々
でよろしいのでしょうか。変える必要があるのは,1,の部分でしょうか?実は学びながらなんです。

投稿日時 - 2018-05-11 08:13:08