• ベストアンサー

選択範囲のセルを1行ずつ結合するマクロ

こんにちは、いつも参考にさせていただいております。 セルを範囲選択し、 1行ごとに結合させる方法はないでしょうか。 手作業ではなくマクロでの方法を探しています。 イメージとしては (1)範囲選択する (2)マクロ実行する  →列の範囲を1行ずつ、選択している範囲だけ各行を結合 図も添付いたしますので、どうかアドバイス・ヒント頂けないでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 以下は、私がツールバーで使っているものです。 そのままですと、書式がCenter になってしまいますので、左寄せにします。また、これは、トグルになっていますから、同じ範囲を選択すれば、元に戻すことが可能です。 なお、これは、良く使われるものですから、個人用マクロブック側に入れて呼び出しています。 '------------------------------------------------- Sub MergeCells() Dim r As Range   If StrComp(TypeName(Selection), "Range", 1) = 0 Then   For Each r In Selection.Rows     If r(1).MergeCells = False Then     r.Merge     With r.Rows     .HorizontalAlignment = xlLeft     .VerticalAlignment = xlBottom     .WrapText = False     .Orientation = 0     .AddIndent = False     .IndentLevel = 0     .ShrinkToFit = False     .ReadingOrder = xlContext    End With   Else    With r    .UnMerge    .HorizontalAlignment = xlGeneral    End With   End If  Next r  End If End Sub

yuripppe
質問者

お礼

Wendy02さん、ご回答ありがとうございます。 マクロをご提示いただきありがとうございます。 このようなやり方でも実現できるのですね。 セル毎のオプションも多様にあることがわかり、勉強になりました。 早速やってみましたが、無事実現できました。ありがとうございました。 以下他の方にも質問して恐縮なのですが、 よければご意見お聞かせ願えないでしょうか。 聞きたい内容は、各行を結合させるごとに 毎回「最左端のデータのみ保持されますが、結合しますか?」 というようなダイアログが出るのですがこれは飛ばせるかどうかです。 お時間あればご意見くださると幸いです。 ご回答ありがとうございました。

その他の回答 (9)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

#9の補足 なお、私のマクロは、既存の横結合ですと、文字の場合は左寄せされますが、数字を入れると、右寄せされてしまいます。それを結合と同時に左寄せします。また、トグルで横結合を戻しますと、書式も標準に戻すようになっています。

yuripppe
質問者

お礼

Wendy02さん、補足ありがとうございます。 > なお、私のマクロは、既存の横結合ですと、文字の場合は左寄せされますが、 > 数字を入れると、右寄せされてしまいます。それを結合と同時に左寄せします。 > また、トグルで横結合を戻しますと、書式も標準に戻すようになっています。 ご説明ありがとうございます。 この機会でマクロをもっと勉強したいと思います。 なかなか手の出ないマクロでしたが、思い切って質問して良かったです。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.9

こんにちは。 >毎回「最左端のデータのみ保持されますが、結合しますか?」 >というようなダイアログが出るのですがこれは飛ばせるかどうかです。 これは、既存の機能ですから、私個人は、一般的には手を付けませんてした。これは、なるべく既存のものに近づけるためです。今の段階では、Ctrl + z で戻す機能は付けておりません。ややこしくなるからです。DisplayAlerts でも、可能だと思います。  If r(1).MergeCells = False Then     r.Offset(, 1).Resize(, r.Columns.Count - 1).ClearContents '*この行を加えます。     r.Merge なお、コマンドボタンに既存の横結合はあるのは知っていますが、私のマクロは、ふつうの結合ボタンと同じようにトグルになっています。横結合している範囲を選択して、もう一度、マクロを行えばわかります。ツールボタンは、結合と同じボタンを使っています。それでなければ、新たに作る意味がありません。もともと、私のコードは私のために作ったものです。 mars180sxさん、どうもありがとうございます。

yuripppe
質問者

お礼

Wendy02さん、ご返答ありがとうございます。 せっかくの技術を提供していただいたのに、自分本位なことばかり言ってしまい、申し訳ありませんでした。 みなさんは何かの経緯でマクロを開発されるのですし、 何かしら意図があってのスクリプト内容ということに気付くべきでした。 不快な気持ちにさせてしまったことをお詫び申しあげます。 トグル機能についてですが、前の回答で触れずすみませんでした。 ちゃっかり使わせていただいています。 また、新たにマクロのご提示ありがとうございます。 早速試させていただきました。 手作業を加えることなくすっきり結合されました。嬉しいです。 ご返答ありがとうございました。

  • mars180sx
  • ベストアンサー率31% (37/119)
回答No.8

度々失礼します。 お望みの形に出来たようなので、私もうれしく思います。 で、結合時にメッセージが表示される件ですが、以下の命令を 追記するとメッセージは表示されなくなります。 (強制的に注意ダイアログを表示しないようにする設定です) ===================================================== Sub Macro1()  Application.DisplayAlerts = False ←この行を追記     | (以下、前述と同じ) ===================================================== 制御系のプログラムを開発する仕事に従事しているので、処理の 速さには重点を置いているのですが、私から見てもWendy02さんの コーディングの方が結合前の状態にも戻せるという点で優秀だと 思います。メッセージを非表示にする方法は上記と同じでOKな はずです。 お役に立ちましたら、Wendy02さんにポイントを付与していただけると 幸いです。(_ _)m

yuripppe
質問者

お礼

mars180sxさん、ご返答ありがとうございます。 おかげさまで気持ちよく作業をすることができました。 > 制御系のプログラムを開発する仕事に従事しているので、処理の > 速さには重点を置いているのですが、私から見てもWendy02さんの > コーディングの方が結合前の状態にも戻せるという点で優秀だと > 思います。メッセージを非表示にする方法は上記と同じでOKな > はずです。 なんと、ということは贅沢にも使い分けができますね。 ありがとうございます。 早速ですが、戻したいときはWendy02さんのを、早く処理したいときはmars180sxさんのを使用させて頂いております。 色々な実現方法があるという点でもとても勉強させていただきました。 本当にありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.7

>「最左端のデータのみ保持されますが、結合しますか?」 >というようなダイアログが出るのですが このメッセージを表示しないようにするには DisplayAlertsプロパティで前後を挟んでやります。 '---------------------------------------  Sub Test()  Dim Rng As Range  Application.DisplayAlerts = False  For Each Rng In Selection.Rows    Rng.Merge  Next Rng  Application.DisplayAlerts = True End Sub '----------------------------------------   以上ここまで。  

yuripppe
質問者

お礼

myRangeさん、ご回答ありがとう御座います。 >DisplayAlertsプロパティで前後を挟んでやります。 このようなプロパティがあるとは・・。 丁寧にマクロも載せていただきありがとうございます。 早速やってみましたが、ダイアログが消えてとてもすっきりしました。 ありがとうございました。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.6

> あとはこれを選択範囲ぶん繰り返すマクロを組めばできそうな気がしてきました。 ん??? 範囲を選択して、このボタン(コマンド)一発で、やりたいことが出来るはずなので、もうマクロを組む必要は無いと思うのですが・・・ 横方向に結合したい範囲が、離れたところにいくつもあるということでしょうか?

yuripppe
質問者

お礼

nattocurryさん、ご返信ありがとうございます。 > ん??? > 範囲を選択して、このボタン(コマンド)一発で、やりたいことが出来るはずなので、もうマクロを組む必要は無いと思うのですが・・・ > > 横方向に結合したい範囲が、離れたところにいくつもあるということでしょうか? いえ、私の勘違いでした。すみません。 勘違い(1) 横方向に結合は1行ずつ選択しないといけないと思っていた。 これはnattocurryさんへの投稿をしたあとすぐに間違いだと気付きました。 勘違い(2) 各行を結合させるごとに 毎回「最左端のデータのみ保持されますが、結合しますか?」という ダイアログが表示されるのですが、 このとき「OK」ボタンを押下する作業が発生するので、 それもマクロで実現させる必要があると思っていました。 結果、繰り返しのマクロを組めばよいのでは、という結論に至りました。 これも勘違い(1)が解消されたあとすぐに気付いて補足するべきでした。 ご返信いただきありがとうございました。

  • mars180sx
  • ベストアンサー率31% (37/119)
回答No.4

すみませんでした。当を得ていない回答だったようなのでリベンジ させていただきます。 以下のマクロは、選択した範囲を「各行毎」に自動でセル結合するものです。 Sub Macro1()  Dim lng_Row As Long  Dim lng_Column As Long  Dim lng_Rows As Long  Dim lng_Columns As Long  Dim cnt_1 As Integer  lng_Row = Selection.Row  lng_Column = Selection.Column  lng_Rows = Selection.Rows.Count  lng_Columns = Selection.Columns.Count  cnt_1 = 0  Do Until lng_Rows = cnt_1   Range(Cells(lng_Row + cnt_1, lng_Column), _   Cells(lng_Row + cnt_1, (lng_Column + lng_Columns) - 1)).Merge   cnt_1 = cnt_1 + 1  Loop End Sub

yuripppe
質問者

お礼

mars180sxさん、ご返信ありがとうございます。 私のつたない文章にお応え下さってとても嬉しく思います。 マクロありがとうございます。 早速ためしてみました。 できました!! 自分でマクロを記録させるよりずっと早く処理してくれてありがたいです。 (自分の記録されたのを見てみたのですが長くなりすぎて意味不明でした・・) ところで、各行を結合させるごとに 毎回「最左端のデータのみ保持されますが、結合しますか?」 というようなダイアログが出るのですがこれは飛ばせないですよね? もしお時間があればご意見いただけると幸いです。 ご回答ありがとうございました。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

マクロを作ることも出来ますが、Excelにそのような機能がありますよ。 表示 - ツールバー - ユーザー設定 「コマンド」タブ 分類:書式 コマンド:横方向に結合 この「横方向に結合」を、ツールバーのどこかに配置しておけば、 範囲を選択して、このボタンを押すだけで、やりたいことが出来ます。

yuripppe
質問者

お礼

nattocurryさん、ご回答ありがとうございます。 >コマンド:横方向に結合 これをやりたかったんです!! こんなのがあったんですね。不勉強で皆様申し訳ありませんでした。 あとはこれを選択範囲ぶん繰り返すマクロを組めばできそうな気がしてきました。 (また懲りずに質問しそうですが・・) 本当にありがとうございました。

  • mars180sx
  • ベストアンサー率31% (37/119)
回答No.2

画像に記載されている文字が読み取れないので正解ではないかも しれませんが- Sub Macro1()   Selection.Merge End Sub これだけで選択した範囲が結合されるはずです。

yuripppe
質問者

お礼

mars180sxさん、ご回答ありがとう御座います。 >画像に記載されている文字が読み取れないので正解ではないかも >しれませんが- なんとも申し訳ありません。イメージの注釈をつけていました。 一応記載させていただきますと、 「※イメージを表すために別のセルに書いていますが、   本来は「別のセルではなく、そのセルが結合される」というようにしたいのです」 ということでした。 範囲選択のマージのマクロありがとうございます。 選択された範囲で1行ずつのマージを行いたかったので、 このマクロはまた別の機会に使わせていただきます。 ありがとうございました。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

>イメージとしては >(1)範囲選択する >(2)マクロ実行する マクロ記録をとればできることだと思います。 記録されたマクロからその時の範囲をRem化するだけじゃないかな

yuripppe
質問者

お礼

Sinogiさん、ご回答ありがとう御座います。 >マクロ記録をとればできることだと思います。 そもそもどんなマクロにすればよいのか自体もよくわかっていませんでした。 せっかく教えていただいたのに、もともとの説明が足りずすみません。 >記録されたマクロからその時の範囲をRem化するだけじゃないかな ちょっと聞きなれない言葉なので、調べてみます。 解決方法が見えてきました。ありがとうございました。

関連するQ&A