エクセルのマクロ(range)について

このQ&Aのポイント
  • エクセルのマクロ(range)について教えてください。
  • マクロの作り方と理解方法について詳しく教えてください。
  • 質問文章に示されているマクロの部分について理解できない箇所があります。
回答を見る
  • ベストアンサー

エクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。 今、日報を作り直しています。 以前作成した方は、このように作っていました。 Worksheets("日報").Select Range("Q7:Q23").Value = Range("U7:U23").Value Range("S7:S59").Value = Range("V7:V59").Value Range("A1").Select MsgBox " 転写を終了しました。" End Sub マクロでは複数の行列を指定していますが、1行だけ表すと、 具体的な表とデータの変化の仕方とするとこのようになっています。 M    O    Q     S       U     V 個数 金額  累計個数 金額金額 (=M+Q) (=O+S) 0、   0、   100、   1000、    100、   1000  1,初期状態 10、  100、  100、   1000、    110、   1100 2,個数を入力すると、計算式を入力してあるUとVの数が変わる 10、  100、   110、   1100、    120、   1200 3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。 0、   0、    110、   1100、   110、    1100 4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。      なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、 2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。 通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、 マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。 なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。 また、QやSをUやVへ書き込んでいないのでしょうか。 どなたか詳しく教えていただけると幸いです。

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

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

プログラミング言語では、一般的に、 「=」は、右辺から左辺への「代入」 を意味します。 マクロ = Visual Basic = プログラミング言語 なので、Excelにおける「=」とは少し意味合いが違っています。

greengum21
質問者

お礼

なるほど、単純明快でとてもよくわかりました。 ありがとうございました。

その他の回答 (1)

  • Asahi2001
  • ベストアンサー率54% (6/11)
回答No.1

エクセル関数を使用して累計個数、金額を計算すればマクロは必要ないと思います。 おそらく方法が分からなくて、U&V列で計算してマクロでコピーして実現してるのかと・・・。 また、複数回マクロを実行したら次々に加算され間違った計算結果になると思います。

greengum21
質問者

お礼

日報のシートにデータを入力して、マクロを実行して累計して、累計以外のデータをクリアして、翌日のデータを入力する。の繰り返しをしていました。 ご指摘のとおり、複数回マクロを実行したら次々に加算され間違った計算結果になることが多いみたいです。 関数を使ったりしながら、使いやすい日報を作りたいと思います。 ありがとうございました。

関連するQ&A

  • マクロについて

    マクロでデータをクリアするコマンドボタンを作りました。でも、計算の答えがでなくなりました。 例えば、 A1:A10までの情報はクリアになります。 答えの“=SUM(A1:A10)”というCセルだけが前の情報のままになります。(Cセルはマクロに登録していません。) 全くのど素人で、マクロの登録も他の書類からコピーしてセルだけ変えました。 マクロの内容は、下記の通りです。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 ' Sub allclear() Application.Calculation = xlManual Range("D4").Value = "" Range("B6").Value = "" Range("B8").Value = "" Range("E11").Value = "" Range("E12").Value = "" Range("F11").Value = "" Range("B21").Value = "" Range("B23").Value = "" Range("B25").Value = "" Range("B27").Value = "" Range("B29").Value = "" Range("P5:P9").Value = "" Range("Q5:Q9").Value = "" Range("P15:P19").Value = "" Range("Q15:Q19").Value = "" End Sub よろしくおねがいします。(_ _)

  • エクセルマクロ if文を繰り返したい

    マクロ初心者です。 以下のようなマクロを作ったのですが、 これをE34まで繰り返しの処理をしたいです。 どこにどんな文章を挟んでいいのかわかりません。 Sub けいさん() If Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "B" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "D" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("C22") = "" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" Else Workbooks("日報.xls").Worksheets("お手本").Range("C22").Copy Workbooks("test.xls").Worksheets("II-1(1)").Range("E11").PasteSpecial End If End Sub

  • excelマクロを用いてのファイル作成について

    excelマクロを用い複数個のファイルを作成する作業を行いたいです。 ファイルの作成そのものは実行できているのですが、その内容に関して 変更したい個所があります。 その変更の仕方がわからないので教えて頂きたいです。 Dim i As Integer For i = 1 To 100 Workbooks.Add Range("a1").Value = "[data,text]=xlsread('DS_0frac.xls','ds0_" & i & "')" Range("a2").Value = "u=" Range("a3").Value = "n=data(u,2)" Range("a4").Value = "a=data(u+n+1,2);b=data(u+n+1,3);c=data(u+n+1,4)" Range("a5").Value = "x1=data(u+1,2);y1=data(u+1,3);z1=data(u+1,4)" Range("a6").Value = "tank=b/a" ChDir "C:\Documents and Settings\orner\My Documents\DS\m" ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\orner\My Documents\DS\m\flds0_" & i & ".m", _ FileFormat:=xlText, CreateBackup:=False Windows("flds0_" & i & ".m").Close savechanges:=False Next i End Sub 上記のようなマクロを実行したところ得られるファイルの内容は以下のようになりました。 "[data,text]=xlsread('DS_0frac.xls','ds0_1')" u= "n=data(u,2)" "a=data(u+n+1,2);b=data(u+n+1,3);c=data(u+n+1,4)" "x1=data(u+1,2);y1=data(u+1,3);z1=data(u+1,4)" tank=b/a 実際には1,3,4,5行目の " を省いた形での出力を望んでいます。 マクロ本文中で " を取り除いた場合には 複数エラーが発生し実行できません。 解決法について教えて頂きたいです。 宜しくお願いします。

  • EXCELのマクロに関して

    vbaのマクロに関して質問があります。 マクロをどのように作ればよいでしょうか? マクロは以下のようになっています。sheet1以外(sheet2,sheet3など)に単語を入れて、sheet1でフラッシュ単語のようにするマクロです。これに付け加えたい内容があります。sheet1のセルにある値を入れれば、sheet1以外のシートのある特定の列をフラッシュ単語としてだしたいと考えています。シートと列を指定したいと考えています。 どのように付け足せばよいでしょうか? Sub sample() Dim i As Integer i = 1 Worksheets("sheet1").Activate Do Sheet1.Range("A1").Value = Sheet3.Range("b" & i).Value '1000で1秒,oで場所,sheet2の場所 Call Sleep(1000) DoEvents i = i + 1 Loop Until IsEmpty(Sheet3.Range("b" & i).Value) '1000で1秒,oで場所,sheet2の場所 End Sub

  • マクロについて教えてください。

    最近、勉強し始めました。 名簿を作成しています。Sheet1のデータを2種類に分けてSheet2(県外)、Sheet3(県内)のあらかじめ作成している表に振り分けたいのです。 しかしながら、1名分のデータをコピーして張り付けることはしたのマクロで出来たのですが、2名分もこのようにするとなると手入力したほうが速いような気がしています。 なにかいい方法がありましたら教えてください。 Sub コピーして別のシートに貼り付ける1() Worksheets("Sheet1").Activate Range("B11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("B10:E17") Range("C11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("A18:E19") Range("D11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("F10:K17") Range("E11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("F18:K19") Range("F11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M10:S10") Range("G11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M11:S11") Range("H11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M12:S12") Range("I11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M13:S13") Range("J11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M14:S14") Range("K11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M15:S15") Range("L11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M16:S16") Range("M11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M17:S17") Range("N11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M18:S18") Range("O11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("M19:S19") Range("P11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("T10:T19") Range("Q11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("U10:U19") Range("R11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("V10:V19") Range("S11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("W10:W19") Range("T11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("X10:X19") Range("U11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("Y10:Y19") Range("V11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("Z10:Z19") Range("W11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("AA10:AA19") Range("X11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("AB10:AB19") Range("Y11").Copy ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("AC10:AG19") End Sub

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

    エクセルのマクロについて エクセル2007を使用しています。もしよかったら教えて頂きたいと思っております。 現在利用しているメインシート(Sheet16で認識)のD5:I500の範囲内で1~31範囲の数字がランダムに入力されています。 この数字群の入ったセルをルール化しているセル背景色塗りを自動で処理したいためマクロを作成しております。 その仕様として、10個のシート(シート名:Aセット配色~Jセット配色)を作成して、各シートのB3:H7範囲に1~31までの数字が入っており、それぞれ数字に背景配色しています。Sheet16内と数字と条件によって該当する10個のシート内(シート名:Aセット配色~Jセット配色)の中から1つのシートとが一致したらそのセット配色シートのセルそのものの書式も運んでくれるルール設計になっています。 (※Sheet16の上記記載している範囲に直接入力及びコピーをして数字が一致したら、色が変わる仕組みになっています。) 更に、Sheet16内のJ3セルにA~J迄の半角英字を入力規制セットしており、例えばそのセルにCを入力すればCセット配色(シート名)、A入力であればAセット配色(シート名)を見に行き、該当処理をして行くという仕様になっております。 そのマクロ(※げNSheet16内に作成しています)が下記なのですが、拝見頂いて仕様がすぐお分かりになると思いますが、、 Private Sub Worksheet_Change(ByVal Target As Range) Dim v As Variant, c As Range, s As Range, myStr As String Dim rng As Range Set rng = Intersect(Target, Range("D5:I500")) If rng Is Nothing Then Exit Sub If Range("J3").Value = "" Then MsgBox "セット配色が未設定です。", vbCritical, "セットエラー " Exit Sub End If myStr = Range("J3").Value & "セット配色" Application.ScreenUpdating = False For Each c In rng.Cells For Each s In Worksheets(myStr).Range("B3:H7") v = c.Value If Not IsNumeric(v) Or v < 1 Or v > 31 Then Exit For c.Interior.ColorIndex = xlColorIndexNone c.Font.ColorIndex = xlColorIndexAutomatic If s.Value = v Then c.Interior.ColorIndex = s.Interior.ColorIndex c.Font.ColorIndex = s.Font.ColorIndex Exit For End If Next s Next c Application.ScreenUpdating = True Set rng = Nothing End Sub 今回の質問内容は、このマクロを少し仕様変更して、 C4:C500範囲でデータ書換えがあった場合にその瞬間、現行のJ3セルにその入力した英字と同じ値を表示させ次の処理に移行する方法にて上手くいかないかなと思っております。 上記のマクロを使用して追加組み込みをする前提で考えると、どういうコードを追加すれば実現出来ますでしょうか? どうかご伝授頂けますと幸いです。 よろしくお願い申しあげます。

  • エクセルマクロ中の再計算について

    A1 -> 11(初期値) A2 -> if(A1>10,1,2) 上記の様に表にデータが入っている場合に以下のマクロを実行した時に再計算されずにマクロの処理が進み遅くなって再計算が実行されるため正確なマクロが実行されないのですが、どうしたら確実に再計算を実行したあとにマクロが処理を継続するようにさせる事が出来るのでしょうか、よろしくお願いします。なお、実際のマクロ及び関数は違います。 Range("A1").value = 1 Calculate if Range("A2").value = 1 then  msgbox "OK" endif end 以上の場合に『OK』メッセージが表示されるものと理解していますが、表示されずに終了してしまいます。

  • EXCELのマクロで数値比較

    「数量」「単価」「金額」のEXCELの表があり「金額」欄が「入力」であったり「計算式」であったりするため「金額」の不整合をチェックするマクロを作りました。(コードの一部は下記) For cntR = 5 To MaxRow If Cells(cntR, 8).Value <> _ Application.RoundDown(Cells(cntR, 6).Value * Cells(cntR, 7).Value, 0) Then Cells(cntR, 23) = "計算違い" End If Next 計算違いとは思えないのに”計算違い”となってしまいます。 テストした表の内容 数量:200 単価:20、20.1、20.3・・・・・20.9、21 金額:=数量*単価の計算式が入っている。 マクロ実行後”計算違い”となってしまうケース。 単価:20.1と20.4の時 ※金額に手入力してみる:”計算違い”になりません。 ※金額欄の計算式を変えてみる=Rounddown(数量*単価,0):”計算違い”になりません。 どこに問題があるのか特定できずにいます。 EXCEL2007・2000の両バージョン下でマクロに手を加えてます。

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

    エクセルのマクロについて エクセル2007を使用しています。もしよかったら教えてください。 現在Sheet1のA1:F500の範囲内で1~31範囲の数字がランダムに入力されています。 この数字群の入ったセルをルール化しているセル背景色塗りを自動で処理したいためマクロを作成しております。 その仕様として、もうひとつシート(Sheet2)を作成して(※シート名は”配色表”にしています)、B3:H7範囲に1~31までの数字が入っており、それぞれ数字に背景配色しています。このシート(Sheet2)内の数字とSheet1内と数字が一致したら配色表のセルそのものの書式も運んでくれるルール設計になっています。 (※Sheet1の上記記載している範囲に直接入力及びコピーをして数字がSheet2内と一致したら、色が変わる仕組みになっています。) そのマクロ(※Sheet1内に作成しています)が下記なのですが、拝見頂いて仕様がすぐお分かりになると思います。 Private Sub Worksheet_Change(ByVal Target As Range) Dim v As Variant, c As Range, s As Range Dim rng As Range Set rng = Intersect(Target, Range("A1:F500")) If rng Is Nothing Then Exit Sub Application.ScreenUpdating = False For Each c In rng.Cells For Each s In Worksheets("配色表").Range("B3:H7") v = c.Value If Not IsNumeric(v) Or v < 1 Or v > 31 Then Exit For '色を一旦戻す c.Interior.ColorIndex = xlColorIndexNone c.Font.ColorIndex = xlColorIndexAutomatic If s.Value = v Then c.Interior.ColorIndex = s.Interior.ColorIndex c.Font.ColorIndex = s.Font.ColorIndex Exit For End If Next s Next c Application.ScreenUpdating = True Set rng = Nothing End Sub ここで今回の質問の本題なのですが、このマクロを少し仕様変更して、現在のSheet2の配色表を、A配色表・B配色表・C配色表...というようにJ配色表まで合計10シートまで増やして(※A~Jは全部別々の色に設定する)、更にSheet1に一つH1の場所のセルにA~J迄の英字を入力するためのセルを設けて、例えばそのセルにCを入力すればC配色表を見に行くという条件付きのマクロにしたいと思っております。 これが簡単そうでなかなかうまく行かず困っています。 上記のマクロを使ってどういう風に変更したらベストであるかご伝授頂ければ幸いです。 どうぞよろしくお願い申し上げます。

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

    エクセルのマクロ実行についてですが、 例えば、 E1セルの値が1ならばこうする(マクロ名 E1セル1) E2セルの値が2ならばこうする(マクロ名 E1セル2) E3セルの値が3ならばこうする(マクロ名 E1セル3) というマクロを別々に作りました。 これをボタンで実行する時に、 If Range("E1").Value = 1 Then ElseIf Range("E1").Value = 2 Then 2行目には作ったマクロを全部貼り付けないといけないのでしょうか? それとも簡単にこの場合は、マクロ名E1セル1を実行するという命令することができるのでしょうか? できるのであれば、入力方法を教えてください。 質問が分かりにくいと思いますが、よろしくお願いします。

専門家に質問してみよう