質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

312閲覧

VBAのMArge方法について

piyotaka

総合スコア39

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2017/11/16 17:09

イメージ説明

上記のイメージ図において、
AならAのみでMarge、BならBのみでMargeする
記載方法方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sa-yu

2017/11/16 19:05

Marge(Mergeのスペルミス?)とはどのような操作でしょうか。セルの結合を意味しているのか、重複の削除を意味しているのかわからないので、結果の例が欲しいです。
piyotaka

2017/11/16 22:31

すみません。結合を意味しています。VBAでやると、何故かAなら一列全てaになる事象を解決したいです。
ExcelVBAer

2017/11/17 00:11

VBAでやってるなら、そのうまくいってないコードを提示した方が回答もらえやすいですよ
piyotaka

2017/11/17 00:26

すみません。諸事情あり、載せられません。
ExcelVBAer

2017/11/17 00:34

言葉で正しく伝えるか、該当箇所のコードが提示できないのであれば、回答しようがないですね。なぞなぞに付き合っている時間はないので。
退会済みユーザー

退会済みユーザー

2017/11/17 04:19

結果として望む状況を(コードでなく手作業で施して)画像で示すことも出来ませんか?
guest

回答2

0

あまりマージ範囲を文字で指定することに意味を見いだせないですが、
マージのサンプルを記載します。

仕様として、
マージ範囲は、
左上と右上と左下と右下の文字列、
4点が一致している必要があります。

起点となる行・列・右下以外に違う文字が存在してもマージされます。

一回しか試してないのでバグがあるかもしれませんが。

'対象のシートがアクティブな状態で実行してください。 Sub MergeSample() '適当に範囲を定めてください。 start_row = 2 last_row = 10 start_col = 1 last_col = 3 '列×行数分の範囲に対してマージ処理を行います。 For j = start_col To last_col i = start_row - 1 next_row: Do While (i < last_row) i = i + 1 '既に結合済みなら次の行へ If Cells(i, j).MergeCells Then GoTo next_row 'マージする対象の開始セルと文字を指定する Set marge_target = Cells(i, j) '横方向のマージ範囲を決める For c = j To last_col If marge_target <> Cells(i, c).Value Then Exit For marge_col = c Next '進みすぎた列を戻す c = c - 1 '縦方向のマージ範囲を決める Do While (marge_target = Cells(i, j)) i = i + 1 Loop '進みすぎた行を戻す i = i - 1 'ついでに右下も左上と同じ文字列でなければいけない If marge_target <> Cells(i, c).Value Then Err.Raise -1, "左上と右下の文字列が一致していません。" '左上から右下まで結合する Range(marge_target, Cells(i, c)).Merge Loop Next End Sub

投稿2017/11/18 05:43

編集2017/11/18 05:48
ikasoumen

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

・どのようなことがしたいのか、詳細な説明ができていない。
・どのようなことをしているのか、具体的な記載ができない。
正直、これでは回答のしようがないです。

⇒どんな範囲を対象にどんな結合を行うことで、こんな結果になりたい
⇒どんな範囲を対象にどんな結合を行ったが、こんな結果になってしまった

こんな記載が追記いただけるともう少し回答がつくのではないでしょうか。

コードを丸々全て提示できなくても、結合を行っている部分、その対象範囲、といった部分に絞っても提示できませんか?

とりあえず基本的なこととして

Excelでセルの範囲を指定してセル結合をした場合
・結合後のセルの値は結合範囲の左上セルの内容となります。
・左上セルが空欄の場合は、行番号の若い順、列番号の若い順に値のあるセルを探し、最初に見つけたセルの値となります。

例えば例1のAAABBBCCCという1列9行を選択範囲として結合すると、9行のセルが1セルに結合され、その値は"A"となります。
これがExcelのセル結合の仕様です。

今回やりたいこと

今回やりたいことは「例1の9行ならAの3行・Bの3行・Cの3行で結合してほしい」ということかと思います。
そして推測ですが、その方法として「1列9行を選択範囲として結合してしまっている」のではないでしょうか?

このような結合を自動的にしてくれる機能はExcel標準では備わっておりません。
選択範囲の中で同じ値が続いているセル範囲を判断して、その範囲ごとに結合するような仕組みをマクロで作るしかないと思います。

下記のサイトさんに参考になりそうな記事がありましたのでご紹介させていただきます。
⇒今日を乗り切るExcel研究所

見当違いでしたらすみません。
参考になれば幸いです。

投稿2017/11/17 01:45

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問