• ベストアンサー

セルの結合マクロについて

セルの結合マクロについてご相談させてください。 セルのA2とA3を結合,B2とB3を結合。 セルのA4とA5を結合,B4とB5を結合。 セルのA6とA7を結合,B6とB7を結合。 というように、A2,A4,A6・・・、B2,B4,B6・・・にデータがあれば、結合するマクロを作成したいです(データがなければそこまでのデータを結合)。 例えば、A2とA3両方にデータがあった場合、A2の内容で表示されるようにしたいです(B2とB3についても同様)。 複雑でどのようにマクロを書けばよいのか困っていました。 恐れ入ります、どのようにすれば良いのかわかる方がいましたら教えていただけないでしょうか。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (780/1630)
回答No.1

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

megumi199
質問者

お礼

早速のご連絡を頂きましてありがとうございました。 大変申し訳ありません、頂きましたこのスクリプトをグーグルスプレッドシートで動かすにはどの様にすれば良いでしょうか。 大変恐れ入りますがご指導頂ければ助かります。

その他の回答 (3)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

どのカテゴリで質問すべきなのかはわかりませんが 少なくともエクセルとして質問する内容ではないと思います。 ともあれ、こんな感じと思います。 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)
回答No.3

カテゴリーがExcel です。 グーグルスプレッドシートなら最初からそう書いて下さい。 そうすればこの質問を無視していました。 Excel はVBA グーグルスプレッドシートはGAS 全然違うのですよ。 GAS は解りません。ごめんなさい。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#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の回答への反応を見ても、質問者は初心者らしく、上記にわからない点があれば、本回答は、無視してもらうほかない。

関連するQ&A

専門家に質問してみよう