プロが教える店舗&オフィスのセキュリティ対策術

こんにちは、いつも参考にさせていただいております。

セルを範囲選択し、
1行ごとに結合させる方法はないでしょうか。
手作業ではなくマクロでの方法を探しています。

イメージとしては
(1)範囲選択する
(2)マクロ実行する
 →列の範囲を1行ずつ、選択している範囲だけ各行を結合

図も添付いたしますので、どうかアドバイス・ヒント頂けないでしょうか。
よろしくお願いいたします。

「選択範囲のセルを1行ずつ結合するマクロ」の質問画像

A 回答 (10件)

#9の補足


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

Wendy02さん、補足ありがとうございます。

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

お礼日時:2009/06/23 16:15

こんにちは。



>毎回「最左端のデータのみ保持されますが、結合しますか?」
>というようなダイアログが出るのですがこれは飛ばせるかどうかです。

これは、既存の機能ですから、私個人は、一般的には手を付けませんてした。これは、なるべく既存のものに近づけるためです。今の段階では、Ctrl + z で戻す機能は付けておりません。ややこしくなるからです。DisplayAlerts でも、可能だと思います。

 If r(1).MergeCells = False Then
    r.Offset(, 1).Resize(, r.Columns.Count - 1).ClearContents '*この行を加えます。
    r.Merge

なお、コマンドボタンに既存の横結合はあるのは知っていますが、私のマクロは、ふつうの結合ボタンと同じようにトグルになっています。横結合している範囲を選択して、もう一度、マクロを行えばわかります。ツールボタンは、結合と同じボタンを使っています。それでなければ、新たに作る意味がありません。もともと、私のコードは私のために作ったものです。

mars180sxさん、どうもありがとうございます。
    • good
    • 0
この回答へのお礼

Wendy02さん、ご返答ありがとうございます。

せっかくの技術を提供していただいたのに、自分本位なことばかり言ってしまい、申し訳ありませんでした。
みなさんは何かの経緯でマクロを開発されるのですし、
何かしら意図があってのスクリプト内容ということに気付くべきでした。
不快な気持ちにさせてしまったことをお詫び申しあげます。

トグル機能についてですが、前の回答で触れずすみませんでした。
ちゃっかり使わせていただいています。
また、新たにマクロのご提示ありがとうございます。
早速試させていただきました。
手作業を加えることなくすっきり結合されました。嬉しいです。
ご返答ありがとうございました。

お礼日時:2009/06/23 15:43

度々失礼します。


お望みの形に出来たようなので、私もうれしく思います。
で、結合時にメッセージが表示される件ですが、以下の命令を
追記するとメッセージは表示されなくなります。
(強制的に注意ダイアログを表示しないようにする設定です)

=====================================================
Sub Macro1()
 Application.DisplayAlerts = False ←この行を追記
    |
(以下、前述と同じ)
=====================================================

制御系のプログラムを開発する仕事に従事しているので、処理の
速さには重点を置いているのですが、私から見てもWendy02さんの
コーディングの方が結合前の状態にも戻せるという点で優秀だと
思います。メッセージを非表示にする方法は上記と同じでOKな
はずです。

お役に立ちましたら、Wendy02さんにポイントを付与していただけると
幸いです。(_ _)m
    • good
    • 0
この回答へのお礼

mars180sxさん、ご返答ありがとうございます。

おかげさまで気持ちよく作業をすることができました。

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

お礼日時:2009/06/23 14:49

>「最左端のデータのみ保持されますが、結合しますか?」


>というようなダイアログが出るのですが

このメッセージを表示しないようにするには
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
'----------------------------------------
 
以上ここまで。
 
    • good
    • 0
この回答へのお礼

myRangeさん、ご回答ありがとう御座います。

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

お礼日時:2009/06/23 14:41

> あとはこれを選択範囲ぶん繰り返すマクロを組めばできそうな気がしてきました。



ん???
範囲を選択して、このボタン(コマンド)一発で、やりたいことが出来るはずなので、もうマクロを組む必要は無いと思うのですが・・・

横方向に結合したい範囲が、離れたところにいくつもあるということでしょうか?
    • good
    • 0
この回答へのお礼

nattocurryさん、ご返信ありがとうございます。

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

ご返信いただきありがとうございました。

お礼日時:2009/06/23 14:08

こんにちは。



以下は、私がツールバーで使っているものです。
そのままですと、書式が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
    • good
    • 0
この回答へのお礼

Wendy02さん、ご回答ありがとうございます。

マクロをご提示いただきありがとうございます。
このようなやり方でも実現できるのですね。
セル毎のオプションも多様にあることがわかり、勉強になりました。
早速やってみましたが、無事実現できました。ありがとうございました。

以下他の方にも質問して恐縮なのですが、
よければご意見お聞かせ願えないでしょうか。

聞きたい内容は、各行を結合させるごとに
毎回「最左端のデータのみ保持されますが、結合しますか?」
というようなダイアログが出るのですがこれは飛ばせるかどうかです。
お時間あればご意見くださると幸いです。

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

お礼日時:2009/06/23 13:54

すみませんでした。

当を得ていない回答だったようなのでリベンジ
させていただきます。
以下のマクロは、選択した範囲を「各行毎」に自動でセル結合するものです。

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
    • good
    • 1
この回答へのお礼

mars180sxさん、ご返信ありがとうございます。
私のつたない文章にお応え下さってとても嬉しく思います。

マクロありがとうございます。
早速ためしてみました。
できました!!
自分でマクロを記録させるよりずっと早く処理してくれてありがたいです。
(自分の記録されたのを見てみたのですが長くなりすぎて意味不明でした・・)

ところで、各行を結合させるごとに
毎回「最左端のデータのみ保持されますが、結合しますか?」
というようなダイアログが出るのですがこれは飛ばせないですよね?
もしお時間があればご意見いただけると幸いです。
ご回答ありがとうございました。

お礼日時:2009/06/23 13:46

マクロを作ることも出来ますが、Excelにそのような機能がありますよ。



表示 - ツールバー - ユーザー設定

「コマンド」タブ

分類:書式
コマンド:横方向に結合

この「横方向に結合」を、ツールバーのどこかに配置しておけば、
範囲を選択して、このボタンを押すだけで、やりたいことが出来ます。
    • good
    • 0
この回答へのお礼

nattocurryさん、ご回答ありがとうございます。

>コマンド:横方向に結合
これをやりたかったんです!!
こんなのがあったんですね。不勉強で皆様申し訳ありませんでした。

あとはこれを選択範囲ぶん繰り返すマクロを組めばできそうな気がしてきました。
(また懲りずに質問しそうですが・・)
本当にありがとうございました。

お礼日時:2009/06/23 11:08

画像に記載されている文字が読み取れないので正解ではないかも


しれませんが-

Sub Macro1()
  Selection.Merge
End Sub

これだけで選択した範囲が結合されるはずです。
    • good
    • 0
この回答へのお礼

mars180sxさん、ご回答ありがとう御座います。

>画像に記載されている文字が読み取れないので正解ではないかも
>しれませんが-
なんとも申し訳ありません。イメージの注釈をつけていました。
一応記載させていただきますと、
「※イメージを表すために別のセルに書いていますが、
  本来は「別のセルではなく、そのセルが結合される」というようにしたいのです」
ということでした。

範囲選択のマージのマクロありがとうございます。
選択された範囲で1行ずつのマージを行いたかったので、
このマクロはまた別の機会に使わせていただきます。
ありがとうございました。

お礼日時:2009/06/23 11:05

>イメージとしては


>(1)範囲選択する
>(2)マクロ実行する


マクロ記録をとればできることだと思います。
記録されたマクロからその時の範囲をRem化するだけじゃないかな
    • good
    • 0
この回答へのお礼

Sinogiさん、ご回答ありがとう御座います。

>マクロ記録をとればできることだと思います。
そもそもどんなマクロにすればよいのか自体もよくわかっていませんでした。
せっかく教えていただいたのに、もともとの説明が足りずすみません。

>記録されたマクロからその時の範囲をRem化するだけじゃないかな
ちょっと聞きなれない言葉なので、調べてみます。
解決方法が見えてきました。ありがとうございました。

お礼日時:2009/06/23 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!