• ベストアンサー

マクロ 結合セルへ値のみ貼り付けるにはどうしたらよいでしょうか。

マクロは初心者で、まだまだ勉強しているところです。 シート名「入出金履歴」のデータを顧客コードごとに分かれている別シートへデータを振り分けて貼り付ける、もしくは反映させたいのですが、貼り付け先のセルがシートの都合上、結合セルになっており、下記のマクロだと当然ながらエラーになってしまいます。結合セルをまず、解除してから貼り付けようと思ったのですが、うまくいかず、困っています。 コピー先の結合状態は、7行目から、列A:C、列D:E、列F:H と、3列になるように結合されています。結合されている行の終わりは、A:C(結合されている)列に「合計」の値が入っているセルの行、H列まで、3列になるよう結合されています。 解除する以外に、良い方法があれば是非教えていただきたいです。 よろしくお願いします。 Sub samplea() r1 = ActiveCell.Row r2 = r1 + Selection.Rows.Count - 1 Dim myRange As Range Dim s_no As String For i = r1 To r2 s_no = Cells(i, 2) Range(Cells(i, 4), Cells(i, 9)).Select Selection.Copy Sheets(Format(s_no)).Select Set myRange = Columns("a:c").Find(what:="合計") If myRange Is Nothing Then Debug.Print "Not Fount" Else myRange.Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Sheets("入出金履歴").Select End If Next End Sub

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

n-junです。 Sub try()  Dim r As Range, rs As Range  Dim myRange As Range  Dim L1 As Long, L2 As Long  Dim i As Long  L1 = ActiveCell.Row  L2 = L1 + Selection.Rows.Count - 1  For i = L1 To L2      Set r = Cells(i, 4).Resize(, 3)      Set myRange = Worksheets(CStr(Cells(i, 2).Value)).Range("A:A").Find(What:="合計")      If myRange Is Nothing Then         Debug.Print "Not Found"      Else         Set rs = myRange.End(xlUp).Offset(1, 0)         rs.Value = r.Item(0).Value         rs.Range("D1").Value = r.Item(1).Value         rs.Range("F1").Value = r.Item(2).Value      End If  Next  Set r = Nothing  Set myRange = Nothing End Sub 一例としてご参考まで。 ⇒コード番号にあるシートは存在している事が条件。(エラー処理してません)

milktea06
質問者

お礼

本当にご丁寧教えてきただきありがとうございます。とても参考になりましたし、勉強にもなりました。動作も速いし、とても助かりました。 私の説明が不十分のところがありましたが、対応していただいてとてもうれしく思います。

その他の回答 (2)

  • a987654
  • ベストアンサー率26% (112/415)
回答No.2

E1に写し基のデータがあり F1:F2(F1:E2結合でも同じ)が結合されたコピー先とします。 マクロ (データが文字でも数値でもa$:文字列変数でいけます)  a$ = Cells(1, 5).Value  Cells(1, 6).Value = a$ cells()内指定は行、列の順でA1を(1,1)と指定する。 2行目(コピー先は結合の左上のセルを指定する) これで2003エクセルでは動きますが、どうでしょうか?

milktea06
質問者

お礼

私の説明が分かりにくかったと思いますが、ご回答いただきありがとうございます。参考にさせていただきます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

どのようなデータの並びから、どのような条件で値を入れたいのかが見えないのですが。 その辺りを提示されてみたら如何かと思います。

milktea06
質問者

補足

すみません。説明が不十分でした・・・。 まず、入出金履歴シートには B列(コード番号)・C列(顧客名)・D列(入金日)・E列(入金額)・F列(備考) という列で構成されております。 コード別に分かれた各シートにはそれぞれ 結合A:C列(入金日)・結合D:E列(入金額)・結合F:H列(備考)となっております。 「入出金履歴」シート上で、振り分けたい日付範囲を選択し、その同行のコードと一致するコード名のシートにそれぞれ入金日・入金額・備考の内容を順に貼り付けるということがしたいのです。貼り付ける場所の条件として、A列上の「合計」の値が入っているいるセルより上での最終行を見つけて、その下にデータを順に貼り付けます。 説明が分かりにくく、申し訳ありません。 まだ分かりにくいようであれば、また補足しますのでよろしくお願いします。

関連するQ&A