• ベストアンサー

選択範囲のセルを結合して、値を代入

画像のような工程表を、作成しております。 4行目のセルを結合して、〇月と表示させたいのですが、可能でしょうか。 5行目の日付は、yyyy/mm/dd で入力しており、表示をddとしております。 この画像ですとG4~AA4、AB4~AW4、AX4~BT4を結合して、5行目の日付から月を参照して、結合したセルに表示させたいです。 4行目の結合範囲は、都度変わるので、選択範囲で結合して、5行目の月を参照させたいのですが、可能でしょうか。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • NuboChan
  • ベストアンサー率47% (790/1658)
回答No.2

以下でどうでしょうか ? 賢者さん、おかしな点(不備、不足 等)あればお願いします。 Option Explicit Sub test() Dim i As Long Dim LastRow As Long Dim TergetRng As Range LastRow = Cells(5, Columns.Count).End(xlToLeft).Column Set TergetRng = Range("B4") '結合解除と初期化 Range("B4").UnMerge Range(Cells(4, 2), Cells(4, LastRow)).ClearContents '月の書き出し For i = 2 To LastRow Cells(4, i).Value = Cells(5, i).Value Cells(4, i).NumberFormatLocal = "mm" Next '同月はセル結合 For i = 2 To LastRow If Month(Cells(4, i)) = Month(Cells(4, i).Offset(0, 1)) Then Set TergetRng = Union(TergetRng, Cells(4, i).Offset(0, 1)) Else Application.DisplayAlerts = False TergetRng.Merge Application.DisplayAlerts = True Set TergetRng = Cells(4, i).Offset(0, 1) End If Next End Sub

konopotter
質問者

お礼

NuboChan 様 追加質問の件、 ①Cells(4, i).NumberFormatLocal = "m月" ② Application.DisplayAlerts = False TergetRng.Merge TergetRng.HorizontalAlignment = xlCenter を追記してみましたら、解決致しました。 NuboChan 様のおかげで思い通りの工程表が作成できます。 この度は、本当にありがとうございました!

konopotter
質問者

補足

NuboChan 様 ご回答ありがとうございます! VBAを実行しましたら、完璧に作動致しました。 このような方法があるとは、また勉強になりました。 本当にありがとうございます! 追加で質問で申し訳ないのですが、2点お伺いしたいことがあります。 ①セルの結合のあと、文字を中央揃えにすることは可能ですか? ②セル結合のあとの月の表示を4月のような表示にすることは可能でしょうか? お時間のある時に教えて頂けたらと思います。 どうぞよろしくお願い致します。

その他の回答 (1)

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

朝に質問を見て、回答を(推測を交えて)考えていて、ふと午後に質問コーナーを見ると新たに質問を挙げて、かつ補足していて、データの様子が変わっていた。 ーーー 日付けをヨコに流しているが、エクセルでは、(できるだけ)データを縦に流すほうが良いと思う。 今後の方針として、エクセルの表を作る段階で、いつもこのことを、考えてみてください。 ーー また体裁(セル結合など)にこだわっているが、手作業でも、できる範囲の作業なら、VBAで凝ってやらない方がよいと思う。時間の無駄。 ーー 無駄だが、下記例を作ってしまったので、参考に上げておく。 例データ A1:A13 B,C,D,列にも、当然データがあると思ったが、質問で説明なく省略。 年月日 2022/5/1 2022/5/2 2022/5/3 2022/5/4 2022/6/2 2022/6/3 2022/6/4 2022/7/1 2022/7/2 2022/7/3 2022/8/1 2022/8/2 結果 (結果シートを、コピーし張り付けしたが、崩れて居るので、興味があれば、実際やって見てください。) 年月日 2022年05月 2022/5/1 2022/5/2 2022/5/3 2022/5/4 2022年06月 2022/6/2 2022/6/3 2022/6/4 2022年07月 2022/7/1 2022/7/2 2022/7/3 2022年08月 2022/8/1 2022/8/2 ーーー コード 標準モジュールに Sub test01() lr = Range("A1000").End(xlUp).Row MsgBox lr i = 2 maecelm = Month(Cells(i, "A")) MsgBox maecelm Rows(i).EntireRow.Insert Cells(i, "A") = Cells(i + 1, "A") Cells(i, "A").NumberFormat = "yyyy年mm月" Range(Cells(i, "A"), Cells(i, "D")).Merge 'セル結合 Cells(i, "A").HorizontalAlignment = xlCenter i = i + 1 '挿入して増えた分修正 'ーーー lr = lr + 1 '最下行挿入して増えた分修正 i = i + 1 '次行へ '---------------- p1: If Month(Cells(i, "A")) = maecelm Then maecelm = Month(Cells(i, "A")) MsgBox maecelm i = i + 1 GoTo p1 Else '-----月が変わった maecelm = Month(Cells(i, "A")) MsgBox "月変化" & maecelm & "へ" '---------行挿入 Rows(i).EntireRow.Insert Cells(i, "A") = Cells(i + 1, "A") Cells(i, "A").NumberFormat = "yyyy年mm月" Range(Cells(i, "A"), Cells(i, "D")).Merge 'セル結合 Cells(i, "A").HorizontalAlignment = xlCenter i = i + 1 '挿入分 'ーーー lr = lr + 1 i = i + 1 '次 If i > lr Then GoTo p2 '終了 GoTo p1 End If p2: End Sub

konopotter
質問者

お礼

ご回答ありがとうございました。 質問の仕方をご教示頂き、ありがとうございました。 エクセルの表については、今後タテのレイアウトで作成したほうがよいと、社内でも周知していきます。 この度はありがとうございました。

関連するQ&A

専門家に質問してみよう