• ベストアンサー

Excel2007のVBAで文字列を結合

Excel2007のマクロで文字列を結合したいのですがうまくいきません。 下記がお題になります 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.2

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) になります。

961awaawa
質問者

お礼

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

その他の回答 (3)

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.4

何故 そんなややこしく考える必要があるのでしょう。 A3に「=A1&B1&C1」と入力 A3:C3を選択して U3までコピー その状態のまま F5キー→[セル選択]→[空白セル]を選択して[OK] 右クリック[削除]→[左方向にシフト] 以上でいいでしょう。

961awaawa
質問者

お礼

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

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

961awaawa
質問者

お礼

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

  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.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
961awaawa
質問者

お礼

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

961awaawa
質問者

補足

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

関連するQ&A