Excelマクロの使い方についてお教えください

このQ&Aのポイント
  • Excelマクロを使用して、E列の値をF列に値を入れる方法について教えてください。
  • 現在のマクロでは、「値のみを貼り付け」をした際に、途中から同じ値がコピーされてしまう問題が発生しています。
  • 正しくデータを貼り付ける方法や、問題解決のためのマクロの改良方法を教えていただきたいです。
回答を見る
  • ベストアンサー

Excelマクロのことで教えて下さい

初歩的なことですみません。 E列の値をF列に値を入れるために下記のマクロを組みました。 Sub test() Worksheets("Sheet1").Select Dim i As Long For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row Range("F2").Value = "=E2/1024/1024" Cells(i, 6).FillDown Range(Cells(2, 6), Cells(i, 6)).Copy Range("F2").PasteSpecial Paste:=xlValues Next i End Sub ところがF列に「値のみを貼り付け」をした時に、途中から同じ値のみがコピーされてしまい困っています。 (画像参照) うまく貼り付けることができるマクロをお教え下さい。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.3

こんばんは。 元のコードを直してみました。ご質問のようなコードでは、ループは必要ないのですが、こういう書き方は、少し手慣れた人が書く方法で、難易度が高くなります。しかし、必ずしもちゃんとしたマクロとはいえません。 本来は、Test2() のような、ワークシートの数式は用いずに、VBAマクロのみにしましょう。なお、ループ式で量的に多い場合、必要に応じて、Application.ScreenUpdating = False, Application.ScreenUpdating = Trueを、始めと終わりに入れてください。また、VBA/VB6では、変数の宣言は、プロシージャ名の後に入れてください。 '//以下のようなコードは、あまり関心しません。 Sub TestR()  Dim i As Long  Worksheets("Sheet1").Select  i = Cells(Rows.Count, 4).End(xlUp).Row  Range("F2").FormulaLocal = "=E2/1024/1024"  Range(Cells(2, 6), Cells(i, 6)).FillDown  Range(Cells(2, 6), Cells(i, 6)).Copy  Range("F2").PasteSpecial Paste:=xlValues  Application.CutCopyMode = False End Sub '// 難易度を下げたマクロ(標準Moduleに限ります) Sub Test2()  Dim i As Long  Worksheets("Sheet1").Select  For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row   Cells(i, 6).Value = Cells(i, 5).Value / 1024 / 1024  Next i End Sub

kagakulove
質問者

お礼

ありがとうございます! 切り貼りしながら覚えたマクロだったので、苦戦してました。 Test2の形でマクロができるのは意外でした、これは眼から鱗です。 あとでじっくり調べて、学ばせていただきます。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です! たびたびごめんなさい。 もう一度質問のコードを見直してみました。 F2セルにはちゃんと E2/1024/1024 の結果が表示されますね! これをD列最終行までオートフィルでコピーし、値として表示したい訳ですよね? No.1のコードでも同じ結果になると思いますが、極力お示しのコード通りオートフィルでやってみると Sub test1() Worksheets("Sheet1").Select Dim i As Long i = Cells(Rows.Count, "D").End(xlUp).Row Range("F2").Value = "=E2 / 1024 / 1024" Range("F2").Select Selection.AutoFill Destination:=Range(Cells(2, "F"), Cells(i, "F")), Type:=xlFillDefault With Range(Cells(2, "F"), Cells(i, "F")) .Value = .Value End With End Sub といった感じでも大丈夫だと思います。 何度も失礼しました。m(_ _)m

kagakulove
質問者

お礼

ありがとうございます! このマクロで正常に値のみ貼り付けができました。 中身はじっくり調べて、色々学ばせていただきます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 結局E列数値を1024で2回割った結果をF列に表示したい!というコトですよね? >Range("F2").Value = "=E2/1024/1024" の部分はダブルクォーテーションでくくってあるために、文字列になってしまうと思います。 ごく単純に Sub Sample1() Dim lastRow As Long Worksheets("Sheet1").Select lastRow = Cells(Rows.Count, "D").End(xlUp).Row If lastRow > 1 Then With Range(Cells(2, "F"), Cells(lastRow, "F")) .Formula = "=E2/1024/1024" .Value = .Value End With End If End Sub ではどうでしょうか?m(_ _)m

関連するQ&A

  • エクセル VBA マクロについて

    VBA初心者です。 Sub 記入() Range("H8", "J14").Copy Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Range("H15", "J21").Copy Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Range("H22", "J28").Copy Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Range("K13").Select End Sub こういうマクロを作り上手く作動しましたのでB列に日付を記入したいと思い Sub 日付() Range("("B" & Rows.Count).End(xlUp).Offset(1)","("C" & Rows.Count).End(xlUp).Offset(0, -1)").Value = Date End Sub このようなマクロを組みましたがエラーがでます。どなたか直して頂けませんか?よろしくお願いします。

  • エクセル2010 マクロで値のみコピー

    こんばんは、エクセル2010を使っています。 マクロでデータを値のみをコピーしたいのですが、うまくいきません。 文は 以下の様なものです。 Sub ボタン1_Click() Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1").PasteSpecial Paste:=xlValues End Sub マクロの画面を閉じようとした時に、Pasteの部分が選択され  コンパイルエラー 修正候補:ステートメントの最後 と言うダイアログボックスが出てしまいます。 ご存知の方教えて頂けないでしょうか、よろしくお願いします。 ※ ちなみに Worksheets("Sheet4").Range("e1").Copy Worksheets("sheet2").Range("b1")  ならちゃんとコピーされるのですが、コピー元の数式がコピーされるので、値のみをコピーしたいのです。

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • エクセル2003 マクロ機能を使ったコピー

    エクセルのマクロ初心者です。 コピー元は、計算式が入ったセルです。 値のみを別のシートへコピーしたいと思っていますが 40番の行でエラーとなってしまします。 行き詰ってしまったため、ご教授いただければ幸いです。 よろしくお願いします。 以下が現在のマクロです。 ================ Private Sub 10 月 = Worksheets("毎月").Cells(1, 2) 20 月 = 月 + 3 30 Worksheets("毎月").Range("F24").Copy 40 Worksheets("年").Range(Cells(月, 3)).Select 50 Selection.PasteSpecial Paste:=xlPasteValues End Sub ================

  • エクセルのマクロでの質問です

    エクセルのマクロでの質問です。 やりたいことは、 明細シートから、「1.3.5」の条件に合うものを実績シートの最終行にコピーして追加していきたいんです。 これだと、実績シートの最終行にはコピーされるんですが 最終行に全部が上書きコピーされる状態になってしまってます。 どう直せば、追加される形になりますか? Sub コピー() '1,3,5のものを実績にコピーする i = 5 J = Sheets("実績").Cells(Rows.Count, 4).End(xlUp).Row + 1 Sheets("明細").Select Do While Cells(i, 8).Value <> "" If Cells(i, 3).Value = 1 Or Cells(i, 3) = 3 Or Cells(i, 3) = 5 Then Range("D5", "H5").Copy Sheets("実績").Select Range("C" & J).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End If i = i + 1 Loop End Sub まったくのマクロ初心者です。 分かりやすく教えていただけると、助かります。 また、参考になりそうなサイトなどがあったら、教えてください。

  • Vlookupマクロにつきまして

    初心者で、 エクセルのマクロにて、下記の処理を行おうとしているのですが、 上手く行きません。 どなたかお助けください! B3=Vlookup(A3,Sheet2!A:F,3,False) B4 A4 B5 A5 とA列に値がある限りカウントアップしていきます。 以下の通り考えてみたのですが、動きません。 Sub vlookup() Dim i As Long For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row Cells(i, "B") = Application.WorksheetFunction.VLookup(Range(Cells(i, "A")), Worksheets("Sheet2").Range("A:F"), 3, False) Next End Sub すみません、宜しくお願いします。

  • エクセルマクロでロックするとエラーが出る

    こんにちは エクセルマクロでロックをかけるとエラーが出てしまいます。 具体的には↓ Sub tes() Range("a1:c1").Copy ActiveWorkbook.Worksheets("Sheet2").Activate ActiveSheet.Unprotect '(1) Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial End Sub 上記のマクロでSheet2にロックをかけるとエラーが起こります。 (1)まではちゃんと行きますし、Sheet2にロックをかけなくても上手く動作します。 原因が思いつかないので、ぜひアドバイスをお願いいたします。

  • 重複行を完全削除するエクセルのマクロ

    Sub sakujyo() Dim i, ii As Long For i = 1 To Range("a65336").End(xlUp).Row For ii = Range("a65336").End(xlUp).Row To i + 1 Step -1 If Cells(i, 4).Value = Cells(ii, 4).Value _ And Cells(i, 13).Value = Cells(ii, 13).Value Then Delete Shift:=xlUp End If Next ii Next i End Sub マクロに関しては、素人でございます。 こちらのマクロを作ってみたのですがうまくいきません。 4列目と13列目の列が重複したときのみ重複した行をすべて削除させたいと思っております。どうぞお教えください。

  • データの値取得マクロ

    Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub でB列の最終行を取得しその後、最終行の次のセルから追加のデータを貼り付けるマクロを作成しました。 このあと、追加のデータを貼り付ける前のB列の最終行の値と貼り付け後のB列の最終行の値を取得したいのですがどうすればいいでしょうか?

  • EXCELマクロについて

    条件 シート名提供データE列の3行目からデータが入っています。    ブランク以外のデータをコピーしてシート名WorkのC列の2行目から貼り付けたいので下記のマクロを書いていますがおかしい所 はないのでしょうか。教えてください。 いまいちCellsの使い方がわかりません。 出来たら下記の意味を教えてください。 brank = Worksheets("提供データ").Cells(gyo, 5).Text Range(Cells(3, 5), Cells(gyo, 5)).Select Sub 貼付() Dim gyo, brank Sheets("提供データ").Select Range("e3").Select gyo = 2 Do gyo = gyo + 1 brank = Worksheets("提供データ").Cells(gyo, 5).Text Loop While brank <> "" Range(Cells(3, 5), Cells(gyo, 5)).Select Selection.Copy Sheets("work").Select Range("c2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub

専門家に質問してみよう