- ベストアンサー
セルの結合マクロについて
セルの結合マクロについてご相談させてください。 セルのA2とA3を結合,B2とB3を結合。 セルのA4とA5を結合,B4とB5を結合。 セルのA6とA7を結合,B6とB7を結合。 というように、A2,A4,A6・・・、B2,B4,B6・・・にデータがあれば、結合するマクロを作成したいです(データがなければそこまでのデータを結合)。 例えば、A2とA3両方にデータがあった場合、A2の内容で表示されるようにしたいです(B2とB3についても同様)。 複雑でどのようにマクロを書けばよいのか困っていました。 恐れ入ります、どのようにすれば良いのかわかる方がいましたら教えていただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A2とA3、A4とA5の様に2つづづ結合する。 A2が空白で、A3にデータがあった場合が書いてありませんが、A3を出力でよろしいですか。 ' Option Explicit ' Sub Macro1() ' Dim Col As Integer Dim Row As Long ' [A:B].MergeCells = False ' For Col = 1 To 2 ' For Row = 2 To Cells(Rows.Count, Col).End(xlUp).Row Step 2 ' If Cells(Row, Col) & Cells(Row + 1, Col) > "" Then Application.DisplayAlerts = False Cells(Row, Col).Resize(2).MergeCells = True Application.DisplayAlerts = True End If Next Row Next Col End Sub
その他の回答 (3)
- HohoPapa
- ベストアンサー率65% (455/693)
どのカテゴリで質問すべきなのかはわかりませんが 少なくともエクセルとして質問する内容ではないと思います。 ともあれ、こんな感じと思います。 function test1() { var sheet = SpreadsheetApp.getActiveSheet(); var lastRow = sheet.getLastRow(); for(var i = 1; i*2 <= lastRow; i++) { sheet.getRange(i*2,1,2,1).mergeVertically(); sheet.getRange(i*2,2,2,1).mergeVertically(); }};
- SI299792
- ベストアンサー率47% (780/1630)
カテゴリーがExcel です。 グーグルスプレッドシートなら最初からそう書いて下さい。 そうすればこの質問を無視していました。 Excel はVBA グーグルスプレッドシートはGAS 全然違うのですよ。 GAS は解りません。ごめんなさい。
- imogasi
- ベストアンサー率27% (4737/17069)
#1のご回答でよいのだろうが、参考に。 ーー 初心者は、どの点を、相対化(フレクシブルに)して、コードを組むのか、 明記してないとか、意識してない場合が多い、ので困る。 下記は (1)対象列は複数(簡単に増やせるがA-C列とした。飛び飛び列も修正はカンタン。 (2)データ数(行数) は相対化している。 固定しているのは、 (1)各列1列の中だけの結合。 (2)隣接上下2行のセルを結合する という点は、固定したコードとなっている。 これらを自由にすると、コードが複雑で、初心者には判りにくいと思って この辺にしてある。 また、チェックを省いてあるのは 2行づつの結合なら、第2行から始まるので、奇数行で終わるのがふつうだが、そのチェックはいてない。 ーー 標準モジュールに下記コードをコピペ貼り付け Sub test02() Dim c As Variant Range("a2:A21").UnMerge c = Array("A", "B", "C") Application.DisplayAlerts = False '---各列の繰り返し For Each clm In c MsgBox clm lr = Range(clm & 10000).End(xlUp).Row '?e??f?[?^????s?T?? MsgBox lr '---各列での行の繰り返し For i = 2 To lr Step 2 ’2行分結合のためStep 2 t = Range(clm & i) & Range(clm & (i + 1)) Range(clm & i & ":" & clm & (i + 1)).Merge False Range(clm & i) = t Next i '---- Next Application.DisplayAlerts = True End Sub 例データ(a1などは文字列であれば何でもよいが) A,B,C列 a1 b1 c1 a2 b2 c2 a3 b3 c3 a4 b4 c4 a5 b5 c5 a6 b6 c6 a7 b7 c7 a8 b8 c8 a9 b9 c9 a10 b10 c10 a11 c11 a12 c12 c13 c14 ーーーーー 結果データ A,B、C列 a1a2 b1b2 c1c2 a3a4 b3b4 c3c4 a5a6 b5b6 c5c6 a7a8 b7b8 c7c8 a9a10 b9b10 c9c10 a11a12 ーー c11c12 ーー ーー c13c14 #1の回答への反応を見ても、質問者は初心者らしく、上記にわからない点があれば、本回答は、無視してもらうほかない。
お礼
早速のご連絡を頂きましてありがとうございました。 大変申し訳ありません、頂きましたこのスクリプトをグーグルスプレッドシートで動かすにはどの様にすれば良いでしょうか。 大変恐れ入りますがご指導頂ければ助かります。