Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2007)
セルの結合方法
投稿日時: 18/11/08 15:19:20
投稿者: FILETUBE

こんにちは。
続けての質問で申し訳ありません。
 
C列からH列までを前行と同じ値ならセルをそれぞれの列で結合したいので
下記のコードをコーディングしましたが
A列のみが結合されてしまいます。
C列からH列まで結合したいのですが
下記のコードをどのように訂正しればよろしいでしょうか。
 
 Dim myRng As Range
 Dim myRow As Long
 Set myRng = Range("C1")
 
 For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        With Cells(myRow, 1)
             If .Value = .Offset(1, 0).Value Then
                Set myRng = Union(myRng, .Offset(1, 0))
             Else
                Application.DisplayAlerts = False
                myRng.Merge
                Application.DisplayAlerts = True
                Set myRng = .Offset(1, 0)
             End If
        End With
 Next
 
結合もフィルターも初めてで
大変申し訳ありませんが
分かる方おられましたら、どうぞよろしくお願いします。

回答
投稿日時: 18/11/08 15:33:40
投稿者: WinArrow
投稿者のウェブサイトに移動

>With Cells(myRow, 1)
 
これは、A列セルになりますが、よろしいのですか?
 

投稿日時: 18/11/08 15:38:42
投稿者: FILETUBE

WinArrowさん、回答ありがとうございます。
そして何回も。
 
なるほどここですか。
With Cells(myRow, 1)
 
CからH列というと
 
With Cells(myRow, 3)
             If .Value = .Offset(1, 0).Value Then
                Set myRngC = Union(myRngC, .Offset(1, 0))
             Else
                Application.DisplayAlerts = False
                myRngC.Merge
                Application.DisplayAlerts = True
                Set myRngC = .Offset(1, 0)
             End If
        End With
        '
With Cells(myRow, 4)
             If .Value = .Offset(1, 0).Value Then
                Set myRngD = Union(myRngD, .Offset(1, 0))
             Else
                Application.DisplayAlerts = False
                myRngD.Merge
                Application.DisplayAlerts = True
                Set myRngD = .Offset(1, 0)
             End If
End With
 
と増やしていくということになりますか?

回答
投稿日時: 18/11/08 17:14:18
投稿者: WinArrow
投稿者のウェブサイトに移動

処理ブロックをC列〜H列まで、6個も作ると森ですか?
 
For 列 = 3 TO 8
    For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        With Cells(行,列)
         'セル結合
        End With
    Next
Next
 
 
セル結合する際、下のセルを空白にすると、警告が出なくなります。
結合した後の、OFFSET(1,0)は、問題ないか確認したほうがよいです。
 

投稿日時: 18/11/08 19:05:56
投稿者: FILETUBE

WinArrowさん、今回もありがとうございます。
 
処理ブロックは6つ作成になります。
少しお聞きしたいのですが、
罫線を引いた後、フィルタをかけると
処理ブロックの大きいものは罫線が消えて
表示されてしまいますが、このような事は
仕方ないのでしょうか?

回答
投稿日時: 18/11/08 19:28:51
投稿者: WinArrow
投稿者のウェブサイトに移動

>処理ブロックをC列〜H列まで、6個も作ると森ですか?
入力ミスありました。
 
処理ブロックをC列〜H列まで、6個も作るつもりですか?
 
私が「ブロック」と書いたのは
C列用
D列用
E列用
F列用
G列用
H列用
各々の
With 〜End With
の塊を指したものですが、
 
あなたの処理ブロック
は、どのようなものですか?
※最後の質問は理解できません。
 

投稿日時: 18/11/08 19:53:50
投稿者: FILETUBE

回答ありがとうございます。
 
C列 品番
D列 品名
 
等が同じ場合は結合します。
それが6つあります。
 
罫線が消えてしまうのは
結合した後、フィルタ−をかけると
罫線が消えて表示してしまうのですが
分かりにくいですか。
 
どうもすいません。
[/quote]

回答
投稿日時: 18/11/08 20:18:49
投稿者: simple

6つの列に対して繰り返し処理を行うことはクリアーされたのですね。
 
フィルタとの関係ですが、
結合セルにフィルタを掛けるのは無茶だと思います。
結合セルをひとかたまりとフィルタは認識しないはずです。
罫線がどうこうという話以前のような気がしますがいかがでしょう。
 
重複した文字列を表示しないようにしたいということだけなら、
「重複した部分のセルのフォント色を白にする」という手がよいでしょう。

投稿日時: 18/11/08 21:19:00
投稿者: FILETUBE

回答ありがとうございます。
6列での結合はおかげさまで、出来ました。
フィルターは数量が10枚以上のみ表示したい為に必要ですし、
セルの結合は同じ値は見やすくする為に
1つにまとめたいのです。
 
Simpleさんが言われるように
重複部分を白くして、フィルターという方が罫線が
見やすくなるかと思います。
 
申し訳ありません、重複部分を白くは
どのようになりますか?
 
よろしくお願いします。
 

回答
投稿日時: 18/11/08 22:23:58
投稿者: simple

>申し訳ありません、重複部分を白くは
>どのようになりますか?

すみません、不明な点はどこですか?
重複しているかどうかは今でもできているんですよね。
フォント色を白にするのは、
どこかのセルで試して、その動作をマクロ記録してみては?

回答
投稿日時: 18/11/08 22:29:52
投稿者: simple

条件付き書式を設定する手もあるかもしれませんね。

回答
投稿日時: 18/11/08 22:45:39
投稿者: WinArrow
投稿者のウェブサイトに移動

ちょっと、元に戻りますが、
セル結合と罫線の関係について
 
罫線を設定してからセルを結合すると、罫線が消えてしまうのは当然のことです。
普通は、セルを結合してから、罫線を設定します。
 
 
オートフィルタとの関係で、セルの結合はやめたんですね。
 
simpleさん提案の条件付き書式を設定する方が確実だと思います。
 
マクロではなく、手操作で設定できます。
 
 
 
 

投稿日時: 18/11/09 07:10:06
投稿者: FILETUBE

回答ありがとうございます。
Simpleさん、重複の判断はできています。
条件付き書式を調べます。
 
WinArrowさん、もう一度結合してから罫線を引くとどうなるか
試してみます。
 
これで上手くいかないのなら、
おっしゃる通り結合は諦めます。

回答
投稿日時: 18/11/09 07:21:33
投稿者: simple

引用:
これで上手くいかないのなら、
おっしゃる通り結合は諦めます。

結合ということの原理的なことの理解がされていないように思います。
 
A2:A4が結合されていて、値が1としましょう。
そのとき1と等しいものをオートフィルタで抽出すると、
A2だけが抽出され、A3:A4は抽出されませんよ?
 
1という値が入っているのはA2だけであって、
A3:A4は何も入っていないからです。

投稿日時: 18/11/09 08:56:41
投稿者: FILETUBE

回答ありがとうございます。
 
別の手段として再度罫線を引こうと思います。
 
結合しフィルターをかけて罫線が表示されない状態です。
この状態でセルの書式設定から罫線を引こうとしてもだめでした。
 
別シートにコピーして罫線を引こうとしても
「結合されたセルの一部を変更する事はできません」のエラーになってしまいます。
 
このような事はできないのでしょうか?
 
分かる方おられましたら、よろしくお願いします。

回答
投稿日時: 18/11/09 10:46:21
投稿者: WinArrow
投稿者のウェブサイトに移動

>結合しフィルターをかけて罫線が表示されない状態です。
 
そうですね。
結合したら
例えば、下のセルは、非表示になりますから、
当然、罫線も非表示になります。
そのために結合しているんだから無理でしょう。
スペースに見えるセルに罫線があったら、何が問題になるんでしょう。
 
 

投稿日時: 18/11/09 13:06:47
投稿者: FILETUBE

皆さん、いろいろ回答ありがとうございました。
結合まではおかげさまで、出来ましたので
ここは一旦完了としたいと思います。
 
あとはフィルタだけにします。
本当にありがとうございました。