VBAでセル内改行と他セルの文字をカット&ペーストする方法

このQ&Aのポイント
  • VBAを使用して、A1セル内のテキストを改行させ、他のセルの値をカットしてそれに貼り付ける方法について教えてください。
  • 「マクロの記録」を使用してコードを生成すると、テキストそのものが書き込まれてしまい、応用が効かないことがあります。
  • 改行やテキストのカット&ペーストの動作を実現するためには、どのようにVBAコードを記述する必要がありますか?
回答を見る
  • ベストアンサー

VBA セル内改行+他セルの文字をカット&ペースト

A1セル内文字の最後部分にカーソルを持っていって、Alt+Enterを押してA1セルを2行に改行する、 B1にある値をカットして、A1の改行した部分に貼り付け というマクロを作るべく、「マクロの記録」をしてみたところ、A1のテキストがそのままマクロに書き込まれてしまって応用ができないです。 改行部分に貼り付けするにはB1セルの値はコピーではなくカットが必要だと思いますが、これも「マクロの記録」だと動作ではなくテキストそのものが書き込まれてしまい、応用が効きません。 Sub A1改行カットペースト() ' ' A1改行カットペースト Macro ' ' ActiveCell.FormulaR1C1 = "RO20-001" & Chr(10) & "" Range("B1").Select ActiveCell.FormulaR1C1 = "" Range("A1").Select ActiveCell.FormulaR1C1 = "RO20-001" & Chr(10) & "8/7到着" Range("F4").Select End Sub "RO20-001"と"8/7到着"はA1とB1の値であって、この記述ではこのマクロをループさせた時、他の全部のセルに"RO20-001"と"8/7到着"が貼りついてしまいます。 改行やテキストのカット&ペーストの「動作」はどのように記述すれば良いのでしょうか? どなたかご存じの方がいらっしゃいましたら、教えて下さい。 よろしくお願いします。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

とりあえずA1だけですが Range("A1").Value = Range("A1").Value & Chr(10) & Range("B1").Value Range("B1").ClearContents

potetito
質問者

お礼

ご回答ありがとうございます。 出来ました。。。 ずっと私を苦しめ続けたコツコツ作業がオートになりました。。。( ;∀;) Dim i As Long For i = 1 To 200 Range("A" & i).Value = Range("A" & i).Value & Chr(10) & Range("B" & i).Value Range("B" & i).ClearContents Next i End Sub これで作業時間が圧倒的に短縮されます! 朝から感動で震えております!!! 本当に。。。ありがとうございました!!!

その他の回答 (3)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.4

No.3です。 訂正します。 CharではなくChrです。

potetito
質問者

お礼

補足ありがとうございます。 そうですねCharは歌手ですね。 そっちも好きではあります。 ありがとうございました。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.3

文字入力領域の値を貼っても、その値が張り付くだけです。 なので、 Range("A1") = Range("A1") & Range("B1") とすれば、セル値を連結できます。 セル内改行は、Char(10)なので、これを間に挟めば良いです。 Range("A1") = Range("A1") & Char(10) & Range("B1")

potetito
質問者

お礼

ご回答ありがとうございます。 下記でやってみましたが、「Endに対するNextが無い」といったエラーが出ました。 Dim i As Long For i = 1 To 200 Range("A"&i) = Range("A"&i) & Range("B"&i) 。 Range("A"&i) = Range("A"&i) & Chr(10) & Range("B"&i) Next i End Sub でもセル内改行はChr(10) なのですね、本当に勉強になります。 ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

添付画像左側の状態で、 B1をマウスで右クリック コンテキストメニューから「コピー」を左クリック A1セルをマウスで左クリック マクロを実行 と操作したときに 添付画像右側の状態にしたい。 つまり、 A1に埋まっている内容の下に1行開けて、 B1に埋まっている内容を追記したい。 かつ、この動作を対象セルを問わない機能にしたい。 この理解でいいでしょうか。 クリップボードを扱う必要があり、 若干難易度が上がります。 少なくとも、 マクロの記録機能で作成したコードを手直しする方法では 解決できません。 https://www.moug.net/tech/exvba/0150091.html ↑で説明する参照設定を行い 後記のコードを実行することとなります。 Sub Sample3()  '参照設定が必須  'https://www.moug.net/tech/exvba/0150091.html  Dim wkText As String    With New MSForms.DataObject      .GetFromClipboard  ''変数のデータをDataObjectに格納する      If ((Left(.GetText, 1) = """") And (Right(.GetText, 3) = """" & vbCrLf)) Then    'MsgBox "Hit"    wkText = Mid(.GetText, 2, Len(.GetText) - 4)   Else    wkText = .GetText   End If      ActiveCell.Value = ActiveCell.Value & vbLf & wkText    End With    Application.CutCopyMode = False End Sub

potetito
質問者

お礼

ご回答ありがとうございます。 下記丸写しでやってみたところ、「ユーザ定義型は定義されていません」とのエラーが出ました。  Dim wkText As String   With New MSForms.DataObject     .GetFromClipboard  ''変数のデータをDataObjectに格納する    If ((Left(.GetText, 1) = """") And (Right(.GetText, 3) = """" & vbCrLf)) Then    'MsgBox "Hit"    wkText = Mid(.GetText, 2, Len(.GetText) - 4)   Else    wkText = .GetText   End If     ActiveCell.Value = ActiveCell.Value & vbLf & wkText  End With   Application.CutCopyMode = False End Sub 事前に何か設定が必要なのですね。 参照サイトを見てみます。 ありがとうございました。

関連するQ&A

  • VBA cut&pasteが出来ない

    セルのカット&ペーストをしようとしてますが、エラーになります。 activecell.offset(1,5).range("A1:H1").cut destination:=activecell.offset(4,2).range("A1") うろ覚えですが「○○定義エラー」。デバックモードでカーソルを当てて見ると、後半のoffsetの部分でエラーになってるようです。なぜでしょう?末尾のrange(A1)は自動マクロで作成し加工して作った際の残りです。

  • Excelでマクロを使いセルの内容をコピー貼り付け

    A1セルに111と入力してあるとします。 この時B1にaaa111aaaと入力するマクロを作りたいです。 A1に222があるとB1はaaa222aaaと入力したいです。 これをマクロで作ったのですが、次のようになり、A1の内容にかかわらず常にaaa111aaaとなってしまいます。 Sub Macro1() Range("A1").Select ActiveCell.FormulaR1C1 = "111" Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Range("B2").Select Application.Goto Reference:="Macro2" End Sub これのいらない行を削除し、コピーはA1の内容となるように修正して次のようにしました。 Sub Macro1() ActiveCell.FormulaR1C1 = Range("A1") Range("B1").Select ActiveCell.FormulaR1C1 = "aaa111aaa" Application.Goto Reference:="Macro2" End Sub まだペーストするときにA1の内容とならず直接入力となっています。 これをどう変更すればいいでしょうか?

  • VBAでの結合セルのコピー&ペースト

    こんにちは。 EXCELのVBAでマクロを作成しています。 セルの値のコピー&ペーストを行おうとしているのですが、結合されているセルのペーストのときに、「同じ結合セルが必要です」とエラーになってしまいます。 例えば、A1とA2が結合されたセル+A3をコピー Worksheets(x).Activate Range("A1:A3").Selection Range("A1:A3").Copy 別のシートで、B1とB2が結合されたセル+B3にペースト Worksheets(y).Activate Range("B1:B3").Paste セルの結合を解除すればうまくいきます・・・ セルを結合したままペーストしたいのですが、どうやら間違っているようです(ノ_・。) どなたか教えてください。 よろしくお願いします。

  • 指定したセルに番号をつけていくマクロ

    現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

  • Excelでセル内改行する方法

    セル内改行法で、改行記号ごと、他のソフト (notepad)にコピー、ペーストして編集できないものかと考えています。 昔は、A1セルにセルに、 高い山 青い海 と表示させるために、「高い山Alt+ Enterキー青い海」 http://trendy.nikkeibp.co.jp/article/tec/excel/20040310/107753/ と入力する方法を使っていたのですが、一旦A1セルの内容をテキスト(ノートパッド等)にコピーしてから再度A1セルに張り付けると 今度は、A1セルに「高い山」、A2セルに「青い海」と、A1,A2セルにまたがって入力されてしまいます。 さて、社内文書のルール上、Excelのセル内に、下記マクロで記載したようなものを書かなければならないことが多くあります。今、私は、 Sub Macro1() ' Cells(1, 1) = "高い山" & Chr(10) & "青い海" Cells(1, 2) = "" & Chr(10) & "陽気な仲間たちは" & Chr(10) & " -青い山" _ & Chr(10) & " -広い海" _ & Chr(10) & "と共に現れる。" End Sub のように裏で記載しておいて最後にマクロを消して提出してますが…。これも面倒です。 ■本題 願わくば、Excelのfx欄に、 陽気な仲間たちは<br> &nbsp -青い山<br> &nbsp - 広い海 … のように記載しておけば、セル上では、所望の表示が得られているといったことってないのでしょうか?

  • マクロで、カット→”値”だけをペーストで、

    セル:B2 は、1(数字) C2は、2(数字) D2は、(式)=B2+C2 が入っています。すなわち、3 です。 B2から下にある数行をカットして”値”だけ別表の下に貼り付けようとしますが、 ( Copy → ペーストなら下記のマクロで出来ますが ) Sub aaa() With ActiveSheet .Range("B2", .Range("D65536").End(xlUp)).Copy _ Destination:=Worksheets("Sheet2").Range("F65536").End(xlUp).Offset(1, 0) End With End Sub Copy を Cut にすると、動きません。 どこがミスしているかを教えていただきたくお願いします。 マクロ初心者です。

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

  • Excell : 現在のカーソルがある行の特定の列に値を書き込むマクロ

    現在のカーソルがある行の特定の列に値を書き込むマクロの書き方を教えてください。以下は20行めのA列、B列にa, b を書き込むものですが、最初のRange("A20").Selectをカレント行に設定するコードを書けばいいのでしょうか?具体的な記述を教えてください。よろしくお願いします。 Sub Macro4() Range("A20").Select ActiveCell.FormulaR1C1 = "a" Range("B20").Select ActiveCell.FormulaR1C1 = "b" Range("C20").Select End Sub

  • マクロのセルの範囲指定

    こんにちは。マクロ初心者です。 今エクセルの業務でマクロを作成しようとしているのですが マクロ実行時にセルの範囲でマウスでセルを選んだところから マクロを実行させたいのですが(マクロを実行する際毎回場所が変わるので)そのようなセル指定方法はあったりしますでしょうか? 項目に関しては(BW4~BX4)は固定です。 関数に関しては(BW10~BW10)は月によっては BW20になったりと行が変わります。 Range("BW10").Selectのカッコ内を毎回変更すればいいのですが 項目が20以上ある為面倒です。 なにか良い方法がありますでしょうか? よろしくお願いいたします。 Range("BW4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数" Range("BX4").Select ActiveCell.FormulaR1C1 = "商談明細NO桁数2" Range("BW10").Select ActiveCell.FormulaR1C1 = "=CONCATENATE(0,RC[-70])" Range("BX10").Select   ActiveCell.FormulaR1C1 = "=RIGHTB(RC[-1],2)"

専門家に質問してみよう