Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11573 / 13646 ツリー ←次へ | 前へ→

【15296】セルの結合を解除して、 やまちく 04/6/19(土) 23:31 質問[未読]
【15300】Re:セルの結合を解除して、 ちゃっぴ 04/6/20(日) 14:37 回答[未読]
【15357】Re:セルの結合を解除して、 やまちく 04/6/22(火) 13:06 お礼[未読]
【15362】Re:セルの結合を解除して、 ちゃっぴ 04/6/22(火) 14:47 回答[未読]
【15388】Re:セルの結合を解除して、 やまちく 04/6/23(水) 9:54 お礼[未読]

【15296】セルの結合を解除して、
質問  やまちく  - 04/6/19(土) 23:31 -

引用なし
パスワード
   お世話になります。
今週から、マクロを始めました初級者です。どうぞ、よろしくお願いいたします。

A1:A3のセルが一つに結合してあるのですが、そのセルの結合を解除してA1と同じ値をA2、A3に入力したいのですが、、、
Sub Macro2()
  With Selection
    .HorizontalAlignment = xlGeneral
    .VerticalAlignment = xlCenter
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = True
  End With
  Selection.UnMerge
  Range("A1").Select
  Selection.Copy
  Range("A1:A3").Select
  ActiveSheet.Paste
End Sub

上記は、自動記録でとったものなのですが、最終的には、
A列で、セルが結合してあれば、1.セルの結合を解除し、2.セルの先頭の値をコピーし、3.コピーした値を解除前の範囲で内に貼り付ける。4.下のセルに結合されたセルが無いかあれば1.2.3.を繰り返すといったものを作成したいのですがよろしくお願いいたします。

【15300】Re:セルの結合を解除して、
回答  ちゃっぴ  - 04/6/20(日) 14:37 -

引用なし
パスワード
   VBAで使用する場合、結合セルは問題が起こりやすいので
出来る限りつかわないというのが、上級者の共通認識です。
(処理が煩雑になりますし、Versionによって動作が異なります)

やまちく さんのソースはマクロ記録そのままだと思いますが、
たいていの処理にはSelect,Activateは不要です。

>  Range("A1").Select
>  Selection.Copy
>  Range("A1:A3").Select
>  ActiveSheet.Paste

は、以下のようにかけます。
Range("A1").Copy Destination:=Range("A1:A3")

また、繰り返し作業はループを使うことになりますが、
いろいろあるので、勉強してみてください。

ここではFor Each 〜 Nextステートメントを利用した
サンプルを示します。

Sub UnMargedCells()
  Dim rngTarget As Range     '対象セル
  Dim lngRowCount As Long     '結合セルの行数
  Dim lngColCount As Long     '結合セルの列数
  
  '使用セル領域をループ
  For Each rngTarget In ActiveSheet.UsedRange
    With rngTarget
      '結合されていたら
      If .MergeCells Then
        With .MergeArea
          lngRowCount = .Rows.Count    '行数
          lngColCount = .Columns.Count  '列数
          .UnMerge            '結合解除
        End With
        '結合されていたセルに値を出力
        .Resize(lngRowCount, lngColCount).Value = .Value
      End If
    End With
  Next rngTarget
End Sub

Excel2000では動作確認済みです。
先程も指摘したとおり別のVer.では動作しない可能性があります。

あと、動作させる前にわからないところを必ずヘルプで調べる
ようにしましょう。

それでも、わからない点がありましたらご質問ください。

【15357】Re:セルの結合を解除して、
お礼  やまちく  - 04/6/22(火) 13:06 -

引用なし
パスワード
   ▼ちゃっぴ さん:
お礼が遅くなりました。
ありがとうございます。
xpでもうまく動きました。

>Range("A1").Copy Destination:=Range("A1:A3")
上記は、下記の行になるのでしょうか?

.Resize(lngRowCount, lngColCount).Value = .Value

宜しくお願いします。

【15362】Re:セルの結合を解除して、
回答  ちゃっぴ  - 04/6/22(火) 14:47 -

引用なし
パスワード
   >>Range("A1").Copy Destination:=Range("A1:A3")
>上記は、下記の行になるのでしょうか?
>
>.Resize(lngRowCount, lngColCount).Value = .Value
>
>宜しくお願いします。

何回も貼り付けるのがめんどくさかったので、
セルの値のみ一気に代入するようにしました。

書式もコピーしたい場合は、Copyメソッドを使用してください。

コピー
Range("A1").Copy Destination:=Range("A1:A3")

値のみコピー
Range("A1:A3")Value = Range("A1").Value

【15388】Re:セルの結合を解除して、
お礼  やまちく  - 04/6/23(水) 9:54 -

引用なし
パスワード
   ▼ちゃっぴ さん:
ありがとうございます。
Resizeメソッドをもっと勉強してみます。
ちなみに、何回も貼り付けるのが面倒ということは、
下記をループでまわすということなのでしょうか?
>コピー
>Range("A1").Copy Destination:=Range("A1:A3")
宜しくお願いいたします。

11573 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free