• ベストアンサー

エクセルVBAを教えてください。

エクセルVBAを教えてください。 エクセル初心者です。 仕事の都合で下記のようなマクロを作らないといけないのですが作り方がよくわかりません・・・。 宜しくお願い致します。 ----------------------------------------------- 列A   列B   列C   列D 1行目  名前   金額   日時 2行目  Aさん  100円  12/1 3行目       200円  12/2 4行目       300円  12/3 5行目  合計   600円 6行目  Bさん  100円  12/1 7行目       200円  12/2 8行目       300円  12/3 8行目       400円  12/4 9行目  合計   1000円 10行目  Cさん  100円  12/1 11行目       200円  12/2 12行目  合計   300円 のExcel表があります。 これを下記のように変更したいです。 列を1つ挿入し、追加した列に合計行までそれぞれの人の名前をペーストしたいです。 列A   列B   列C   列D   列E 1行目  名前   名前   金額   日時 2行目  Aさん  Aさん  100円  12/1 3行目       Aさん  200円  12/2 4行目       Aさん  300円  12/3 5行目  合計   Aさん  600円      ←合計欄まで名前をコピーしたいです。 6行目  Bさん  Bさん  100円  12/1 7行目       Bさん  200円  12/2 8行目       Bさん  300円  12/3 8行目       Bさん  400円  12/4 9行目  合計   Bさん  1000円 10行目  Cさん  Cさん  100円  12/1 11行目       Cさん  200円  12/2 12行目  合計   Cさん  300円

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

No1です。 Sub TEST02() Dim r As Long, i As Long r = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row 'A列最終行取得 Columns("B:B").Insert Shift:=xlToRight 'B列前に列追加 For i = 2 To r '2~最終行まで If Cells(i, "A") <> "" And Cells(i, "A") <> "合計" Then 'A列i行が空白や合計で無い場合 Set x = Cells(i, "A") 'そのセルをxとする End If x.Copy Cells(i, "B") 'B列にxを写す Next '繰り返す End Sub ではどうですか?

lil0703
質問者

お礼

回答ありがとうございます。 これで第二弾が完成することができました。 どうもありがとうございました。 ちなみに、 「If Cells(i, "A") <> "" And Cells(i, "A") <> "合計" Then」 の、所は 「If Cells(i, "A") <> "" And Cells(i, "A") <> " 合計" Then」 と、させていただきました。 やはりスペースが入っていたようです・・・。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。 直接の回答ではありませんが、 Trim /VBA.Trim は、そんなに起用なことは出来ないと思います。 例えば、このようにしないと、スペース抜きの「合計」にはならないはずです。 VBAなら、 Dim ret As String Const MYTEXT As String = " 合 計 " ret = Replace(MYTEXT, " ", "", , , vbTextCompare) (なお、エラーが出ないから余計なことかもしれませんが、Str は、数値型を文字にする関数名ですから、変数に使わないほうがよいですね。) ワークシートなら、 =SUBSTITUTE(ASC(B2)," ","")

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.6

No.2です。 > しかし、これだと列Cの合計行に「合計」という文字がペーストされます。 あれ、おかしいですね。質問文と同じ表で試してうまくいったのですが。他の回答者の仰る通り「合計」の前後に空白が入ってるかもしれませんね。一応、そのケースに対応しました。 Sub 名前をコピー()   Dim r As Range   Dim Name As String, Str As String   Range("C:C").Insert Shift:=xlToRight   Range("C1").Value = "名前"   For Each r In Range("D2", Range("D65536").End(xlUp))     Str = Trim(r.Offset(0, -2).Value)     If Str <> "" And Str <> "合計" Then         Name = Str     End If     r.Offset(0, -1).Value = Name   Next End Sub

lil0703
質問者

お礼

回答ありがとうございます。 ご指摘通り「合計」の前に空白が入っていました・・・。 確認不足・説明不足で申し訳ございませんでした。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.5

"合計"の前後にスペース等は入っていませんか? 例 " 合計" "合計 " "合 計"

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

マクロではないので必要ないかもしれませんが・・・ 数式を使った回答 1 C列に新しい列を挿入する 2 C1に 名前 と入れる 3 C2に数式を入れる =IF(AND(TRIM(B2)<>"合計",TRIM(B2) <> ""),B2,C1) 4 C2をコピーしてC3以降に貼り付ける 5 C列全体をコピーする 6 「形式を指定して貼り付け」で値として貼り付ける (5,6は必要なら実行してください)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

列Aは「○行目」でいいのでしょうか? 一応、書かれた通りにマクロを書いてみました。 ・列Cを挿入して1行目に「名前」を挿入 ・その下C列にB列から取得した名前を挿入 Sub 名前をコピー()   Dim r As Range   Dim Name As String   Range("C:C").Insert Shift:=xlToRight   Range("C1").Value = "名前"   For Each r In Range("D2", Range("D65536").End(xlUp))     If r.Offset(0, -2).Value <> "" And r.Offset(0, -2) <> "合計" Then         Name = r.Offset(0, -2).Value     End If     r.Offset(0, -1).Value = Name   Next End Sub

lil0703
質問者

お礼

早速の回答ありがとうございます。 しかし、これだと列Cの合計行に「合計」という文字がペーストされます。 合計行にも「Aさん」の名前をペーストするには どのようにデバッグすればよろしいでしょうか? お手数ですが、再びご教授宜しくお願い致します。 ■現在のソースでは、↓のようになるのです。 列A   列B   列C   列D   列E 1行目  名前   名前   金額   日時 2行目  Aさん  Aさん  100円  12/1 3行目       Aさん  200円  12/2 4行目       Aさん  300円  12/3 5行目  合計   合計   600円     ← 列Cの合計行が「合計」となってしまいます。 ■合計行にも「Aさん」のように名前をペーストさせたいです。 列A   列B   列C   列D   列E 1行目  名前   名前   金額   日時 2行目  Aさん  Aさん  100円  12/1 3行目       Aさん  200円  12/2 4行目       Aさん  300円  12/3 5行目  合計   Aさん  600円     ← 列Cの合計行にも「Aさん」と名前をペーストさせたいです。     

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

http://odn.okwave.jp/qa2610484.html これあなたじゃないんですか?

lil0703
質問者

お礼

いえ、別の者です。 私も同じような状況でよく似たエクセルを作らないとならなくなったので、質問文を参考にさせていただきました。

関連するQ&A