マクロによる自動化とはどういう意味なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

(1)マクロはマイクロソフトのエクセルやアクセスやワードのマクロを言うことが多いですが、パワーポイントやアウトルックや他社のロータス123一太郎やCADソフトやその他にもあります。

マイクロソフトはVBAといっています。
エクセル等マクロの記録を使うレベルではマクロと言い、
プログラムを組むレベルはVBAと言うようです。
需要が多くて、コスト条件に合うなら、ソフト作成会社は、その気になれば、人間が操作することが多いなら、どんなソフトにもマクロを作ることは可能と思います。
(2)それぞれのソフトには目的が限定されたやりたい操作がありますが、それと密接な関係のある(対応した)プロパティやメソッドと言うものをプログラムに書くと実行時に操作をするがごとく実現してくれます。
COLORプロパティ、COPYメソッドはじめ1000以上。
これらは1からプログラムするとなると、大変深い知識を要し、また手数が掛かりますが1行とか1語で済む場合もあります。
例えばエクセルならエクセルで、やりたいことが数語に対応しています。1から(機械語で)プログラムを組むと直線1本引くにも何百ステップ(段階)のプログラムが必要でしょう。
(3)エクセルの操作に慣れない人にもエクセルを確実に
使ってもらえます。自分でエクセルを使う場合も迅速で確実に使えます。例えば自分が何年か前に作ったシステムで、細部を忘れてしまってもいても、今も動いてくれます。
(4)自動化には
   (A)1回操作の再現(印刷)
   (B)複数操作の連続の再現(表を作成し、印刷)
   (C)同類操作をある部分を少し変えて繰り返し(3     0シートを印刷)
の3つ考えられますが、
VBAには繰り返しがプログラムで組めるので、(C)が出来ます。マクロは主に(A)(B)を再現します。
この(C)により、手作業では、何百回の繰り返しでやってられない操作も、プログラムで実行できます。
例えば100の値以上のセルに色を付けるとか。
(5)これらVBAは一種のプログラムですから、骨格を支える言語が必要で、どれか1つ採用されています。マイクロソフトの場合はそれはVBです。VBのように独立した固有の言語を採用せず、そのマクロに独自に作られている場合も
あります。
    • good
    • 0

マクロはプログラムの一種ですので、手順を記述することで、


自動的に一連の処理を行なうことができます。
具体的なアプリケーションではExcelやWordのマクロ機能が有名です。
http://e-words.jp/w/E3839EE382AFE383AD.html

参考URL:http://e-words.jp/w/E3839EE382AFE383AD.html
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロで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

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

Qエクセルで簡単なオートシェイプのマクロをつくりました マクロの実行とステップごとの実行の結果がちがってしまいます

オートシェイプを使った簡単な寸法線の入った図をマクロで書きました。 ステップごとだと期待どおりのアウトプットなのですが、ダイレクトにマクロを実行すると途中のステップがとんでしまうようです。 どうしてでしょうか。 教えてください。

1 Sub 寸法線1()
2 Dim l1, l2, l3, l4, lb, la1, la2, fig1, fig2, fig3, fig4 As Shape
3 x1 = 200
4 y1 = 500
5 x2 = x1 + 100
6 k = Cells(7, 5).Value / Cells(7, 4).Value
7 y2 = y1 - 100 * k

8 Set l1 = ActiveSheet.Shapes.AddLine(x1, y1, x2 + 20, y1)
9 Set l2 = ActiveSheet.Shapes.AddLine(x1, y1, x1, y2 - 15)
10 Set lb = ActiveSheet.Shapes.AddLine(x1, y1, x2, y2)
lb.Line.Weight = 2#
11 Set l3 = ActiveSheet.Shapes.AddLine(x2 + 5, y2, x2 + 20, y2)
12 Set l4 = ActiveSheet.Shapes.AddLine(x2, y2 - 5, x2, y2 - 15)

13 Set la1 = ActiveSheet.Shapes.AddLine(x2 + 12.5, y1 - 2, x2 + 12.5, y2 + 2)
14 la1.Line.BeginArrowheadStyle = msoArrowheadTriangle
15 la1.Line.BeginArrowheadLength = msoArrowheadLengthMedium
16 la1.Line.BeginArrowheadWidth = msoArrowheadWidthMedium
17 la1.Line.EndArrowheadStyle = msoArrowheadTriangle
18 la1.Line.EndArrowheadLength = msoArrowheadLengthMedium
19 la1.Line.EndArrowheadWidth = msoArrowheadWidthMedium

20 Set la2 = ActiveSheet.Shapes.AddLine(x1 + 2, y2 - 10, x2 - 2, y2 - 10)
21 la2.Line.BeginArrowheadStyle = msoArrowheadTriangle
22 la2.Line.BeginArrowheadLength = msoArrowheadLengthMedium
23 la2.Line.BeginArrowheadWidth = msoArrowheadWidthMedium
24 la2.Line.EndArrowheadStyle = msoArrowheadTriangle
25 la2.Line.EndArrowheadLength = msoArrowheadLengthMedium
26 la2.Line.EndArrowheadWidth = msoArrowheadWidthMedium

27 Set fig1 = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
x1 - 10, y1 + 5, 17, 17)
28 fig1.Select
29 Selection.Characters.Text = Str(Cells(6, 3))
30 Selection.Characters.Font.Bold = True
31 Selection.ShapeRange.Line.Visible = msoFalse

32 Set fig2 = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
x2 + 5, y2 - 20, 18, 18)
33 fig2.Select
34 Selection.Characters.Text = Str(Cells(7, 3))
35 Selection.Characters.Font.Bold = True
36 Selection.ShapeRange.Line.Visible = msoFalse

37 Set fig3 = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
x1 + (x2 - x1) * 0.5 - 13, y2 - 32, 45, 17)
38 fig3.Select

39 Selection.Characters.Text = Str(Cells(7, 4))
40 Selection.ShapeRange.Line.Visible = msoFalse

41 Set fig4 = ActiveSheet.Shapes.AddTextbox(msoTextOrientationUpward, _
x2 + 15, y1 - 0.5 * (y1 - y2) - 8, 17, 45)
42 fig4.Select
43 Selection.Characters.Text = Str(Cells(7, 5))
44 Selection.ShapeRange.Line.Visible = msoFalse

45 MsgBox "pause"
46 Call l1.Select
47 Call l2.Select(False)
48 Call l3.Select(False)
49 Call l4.Select(False)
50 Call lb.Select(False)
51 Call la1.Select(False)
52 Call la2.Select(False)
53 Call fig1.Select(False)
54 Call fig2.Select(False)
55 Call fig3.Select(False)
56 Call fig4.Select(False)
57 MsgBox "hit any"
58 Selection.ShapeRange.Group.Delete

59 End Sub

Cells(7, 5)=50
cells(7,4)=100
cells(6,3)=1
cells(7,3)=2
です。
左端に行番号をふってあります。 36から44まで飛んでしまいます。

節点座標
XY
100
210050

オートシェイプを使った簡単な寸法線の入った図をマクロで書きました。 ステップごとだと期待どおりのアウトプットなのですが、ダイレクトにマクロを実行すると途中のステップがとんでしまうようです。 どうしてでしょうか。 教えてください。

1 Sub 寸法線1()
2 Dim l1, l2, l3, l4, lb, la1, la2, fig1, fig2, fig3, fig4 As Shape
3 x1 = 200
4 y1 = 500
5 x2 = x1 + 100
6 k = Cells(7, 5).Value / Cells(7, 4).Value
7 y2 = y1 - 100 * k

8 Set l1 = ActiveSheet.Shapes.AddLine(x1...続きを読む

Aベストアンサー

処理が飛ばされているわけではないようですよ
シェイプの更新がなされていないだけのようです
44行のMsgBoxの直前に DoEvents を追加してみましょう
これで テキストボックスも表示されると思います

VBEから実行した場合と シェイプのイベントやツール>マクロから実行した場合で画面の更新のタイミングが違うために起きている現象のようです

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qエクセルマクロ 「101」 ボタンをおして 「102」となるマクロ?

エクセルです。
一つのセル(A4)に「101」と書いてあります。それをVlookup関数で他のシートから一致する情報を取り出しています。次に同じセルに「102」とうつと、同じように一致する情報を取り出しています。

そこで、一回、一回、セルに102や103と打つのではなく、ボタンを押すと次の番号にうつるようなマクロを組みたいと思ってます。

ただ、101~130 次は、201~231みたいになってます。
一つのマクロでなくても良いので、よろしくお願いします。

最初は、
Range("A4").select 
セルA4を選択 だと思うのですが、この次から分かりません。

Aベストアンサー

Private Sub CommandButton1_Click()
With Range("a4")
If Right(.Value, 2) < 30 Then
.Value = .Value + 1
Else
.Value = .Value + 71
End If
End With
End Sub

参考まで

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

QLISPのマクロと他の言語のマクロの違い

LISPのマクロは強力と言われていますが、他の言語の言うマクロとはどう違うのでしょうか?

Aベストアンサー

ここでいう「マクロ」は一言で言うと「プログラムを生成する機能」ですね。
例えばCのマクロを例に上げますと、
#define MAX(a, b) (a) > (b) ? (a) : (b)
というようなマクロを定義すると、後に
MAX(10, x)
と書いた際に
(10) > (x) ? (10) : (x)
というプログラムがコンパイル時に生成されます。

Cなどのマクロは、マクロ専用の文法があり、
マクロで書けるものにはある程度の制限が付きます。例えば、
「マクロの引数が定数の際に奇数か偶数かで『生成するプログラム』を変える」
などといった複雑なことはできません。

一方、Lispのマクロは、Lispそのもので書くことが可能で、
任意のプログラムをマクロとして書くことができます。
マクロの中で条件分岐やループなど、なんでも出来てしまいます。
これにより、コンパイル時にマクロの引数の型や値に応じて
生成するプログラムを変えることで最適化を行ったり、
新たな言語機能(と対応する文法)を追加するようなことが可能です。

例えば、昔のLispにはオブジェクト指向の機能がありませんでしたが、
マクロを使うことで、後からオブジェクト指向の機能を付け加えることができました。
また、Common Lispのオブジェクト指向の機能が独特で嫌いな人は、
マクロを使うことでJava風のオブジェクト指向の機能を追加するようなことも可能です。
極端な話、Lispの上で別の言語が作れてしまうわけです。

コンパイル時に任意のプログラムを実行できるという点では、
C++のテンプレートとも似ているといえますが、
C++のテンプレートはテンプレート専用の文法を用いる必要ある点がLispと異なります。
C++をそれなりに書ける人でも、テンプレートで任意のプログラムを書こうとすると、
かなりの苦労を強いられます。テンプレートの文法がC++の文法と異なるのが苦労する原因の一つです。
一方、Lispのマクロは、Lisp自身で書けるため、
Lispが書ける人なら誰にだって書けてしまうわけです。

以上がLispのマクロが強力と言われる要因(の一部)です。
実際に使われてみると色々と実感できると思いますよ。

ここでいう「マクロ」は一言で言うと「プログラムを生成する機能」ですね。
例えばCのマクロを例に上げますと、
#define MAX(a, b) (a) > (b) ? (a) : (b)
というようなマクロを定義すると、後に
MAX(10, x)
と書いた際に
(10) > (x) ? (10) : (x)
というプログラムがコンパイル時に生成されます。

Cなどのマクロは、マクロ専用の文法があり、
マクロで書けるものにはある程度の制限が付きます。例えば、
「マクロの引数が定数の際に奇数か偶数かで『生成するプログラム』を変える」
などといった複雑なことはで...続きを読む

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

Qファイルのファイル間移動を自動化出来ますか?

Windows XP Professional です。

例えば、
フォルダ \C\作業用 に何個かエクセルファイルを保存します。
これを、 \D\保管 に全て移動するにはどうすれば良いでしょうか?

頻繁に、作業用フォルダで、ファイルを作成し、チェック者が確認後、
決まった保管フォルダに移動しているので、何かボタン一発で出来ないかと
考えているのですが、エクセルのマクロの記録をしてみても、案の定、何も記録
してくれませんでした。

Aベストアンサー

batでいかがでしょうか?

以下サンプルです
Cドライブのtes1フォルダ内のエクセルを
Cドライブのtes2フォルダに移動する場合

エディタ等にて
move C:\tes1\*.xls C:\tes2
記載してファイル名をtest.batとして保存します。
あとはクリックすればOKです。
定期的に動作させたいのであれば、このバッチをタスクに登録すればOKです。
参考までに コマンドプロンプトの参考URLを記載します。

参考URL:http://www.confrage.com/dos/command/move/move.html

Qエクセルのマクロ(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へ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


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...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

QExcelでシート名とグラフのタイトルを自動入力させるマクロ

ファイル構成:
グラフ.xls 内に1~50… のグラフのシート(1シートに1グラフ)があり、最後2シートが、グラフの元データ、文字入力の元データ、という形です。
元データの連番通りにシート(グラフ)が並んでいます。

プログラム1でシート名変更。プログラム2で同じシートに、同連番のグラフタイトルを自動で入力したいのです。

例:
シート名     グラフタイトル
1.A1月CM   新規・CM・1月・感想
2.A1月     新規・1月・苦情
3.B1月CM   既存・CM・1月・意見


(文字入力)元データ:
連番、項目A、項目B、 項目C、項目D、項目E、<フィールド名
1   新規  1月    CM  感想   A
2   新規  1月        苦情   A
3   既存  1月    CM  意見   B


プログラム1(シート名変更用):
元データの「連番.項目E項目B項目C」 という形で、同じbook内にあるグラフのシート名を変えるプログラム
(Excelファイルのシートの左から順に 1、2、3・・・・と自動でシート名変更)

sheet1 → 1.A1月CM 
sheet2 → 2.A1月
sheet3 → 3.B1月CM


プログラム2(タイトル入力用):
同じ元データの  「項目A・項目C・項目B・項目D」 と間に"・"を入れて繋いで、
できた物を、グラフシートのグラフタイトルとして貼り付ける。

※項目Cは空欄になっている事もある為、その際は空欄後の"・"を入れずに、
項目A・項目B・項目Dとしたいのです。

例: 新規・CM・1月・感想
   新規・1月・苦情
   既存・CM・1月・意見

関数を使って、貼り付け前の形だけ作ってみましたが、空欄の部分で、「新規・・1月・苦情」となってしまいます。

情報が不足しているようであれば、できる限り追加しますので、おわかりになられる方、どうぞ宜しくお願いします。

ファイル構成:
グラフ.xls 内に1~50… のグラフのシート(1シートに1グラフ)があり、最後2シートが、グラフの元データ、文字入力の元データ、という形です。
元データの連番通りにシート(グラフ)が並んでいます。

プログラム1でシート名変更。プログラム2で同じシートに、同連番のグラフタイトルを自動で入力したいのです。

例:
シート名     グラフタイトル
1.A1月CM   新規・CM・1月・感想
2.A1月     新規・1月・苦情
3.B1月CM   既存・CM・1月・意見


(文...続きを読む

Aベストアンサー

1シートに1グラフとは、グラフシートの事なのか、ワークシートにグラフオブジェクトを置いた状態なのかが解りません。
文脈からシート上のグラフオブジェクトだと仮定してサンプルを書きました。

Sub Test()
Dim i As Integer, r As Range
Dim sName As String, gName As String
On Error Resume Next
For i = 1 To Sheets.Count - 2
  Set r = Sheets(Sheets.Count).Range("A" & i + 1)
  sName = r.Value & "." & r.Offset(0, 5).Value & _
      r.Offset(0, 2).Value & r.Offset(0, 3).Value
  gName = r.Offset(0, 1).Value & "・" & _
      r.Offset(0, 3).Value & "・" & _
      r.Offset(0, 2).Value & "・" & _
      r.Offset(0, 4).Value
  gName = Application.WorksheetFunction. _
      Substitute(gName, "・・", "・")
  With Sheets(i)
     .Name = sName
     .ChartObjects(.Shapes(1).Name).Chart.HasTitle = True
     .ChartObjects(.Shapes(1).Name).Chart.ChartTitle.Text = gName
  End With
Next i
End Sub

1シートに1グラフとは、グラフシートの事なのか、ワークシートにグラフオブジェクトを置いた状態なのかが解りません。
文脈からシート上のグラフオブジェクトだと仮定してサンプルを書きました。

Sub Test()
Dim i As Integer, r As Range
Dim sName As String, gName As String
On Error Resume Next
For i = 1 To Sheets.Count - 2
  Set r = Sheets(Sheets.Count).Range("A" & i + 1)
  sName = r.Value & "." & r.Offset(0, 5).Value & _
      r.Offset(0, 2).Value & r.Offset(0, 3...続きを読む


人気Q&Aランキング

おすすめ情報