Excelでマクロを作り、個人用マクロブックに登録したのですが、このマクロを他のブックから使用すると Sub または Functionが定義されていない とエラーになります。
 なにか勘違いをしているような気がするのですが、どなたか私にアドバイスをしてください。
 あるブックで、マクロを作成し、そのマクロの中で、PERSONAL.XLSに作成した サブルーチン(マクロ)を使用したいのです。
 こういう使い方は、初めてのような気がしますが、できると思っているのです。
ACCESSのVBAとは違うのでしょうか。

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

A 回答 (6件)

>アドインに登録するということは、Personal.xls が不要で、Personal.Xls をPersonal.Xla として保存するということなのでしょうか。



保存形式が変わるだけで内容は同じですから削除するかフォルダを移動。
(ツールバーとかボタンなどに登録してるなら設定解除。)
PERSONAL.XLSに作成したサブルーチン(マクロ)がなかった時の環境に戻せば
問題ないと思います。

アドインとして保存する際は内容がわかりやすい名前が良いですよ。
(「ツール」-「アドイン」のダイアログに表示される名前になるので)
チェックボックスのオンオフで読み込めるようにすることが出来るので
必要な時にだけオンにすれば無駄なマクロを読み込まないので起動が速いかと思います。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。
アドインを作成しました。
 しかし、なんとも奇妙な現象が出ています。
 新しいブックを開けて、マクロを使用するとOKなのですが、従来のブックで使用すると
マクロが見つからないのか ”#NAME?”とでます。
 リンク先の更新をするらしいので、いろいろやってみたのですが、うまくいきません。
 従来のブックでは、Personal.Xls とリンクしているんで解除してやるということ
だと思ったのです。
 また、よろしくお願いいたします。

私の環境は WINDOWS ME で EXCEL は OFFICE XPです。

お礼日時:2001/08/30 09:46

>新しいブックを開けて、マクロを使用するとOKなのですが、従来のブック


>で使用すると マクロが見つからないのか ”#NAME?”とでます。
こちらはEXCEL 2000です。
それにyamamichiさんがどんな方法でマクロの中からアドインを呼び出そうと
してそうなったのかも分からないですし・・・。
従来のブックとは何でしょう?
アドインを登録すればどのブックでも使用できると思うのですが・・・?

No.5のような操作が出来るのでしょうか?(別の操作方法なのでしょうか?)
よくわかりませんが・・・。
マクロの記録を開始して作成したアドインにチェックを入れて外して記録終了。
そうすると登録するマクロにコードが記述されてると思います。

AddIns("作成したアドイン").Installed = True '(Excel2000では) 
AddIns("作成したアドイン").Installed = False 
となります。
上は登録で下が解除ですからこの間に作成したアドインを実行させるコード
を記述すれば良いのでは?

Excel2000では下記のような感じです。
Application.Run ("作成したアドイン.XLA!マクロ名")

XPは使ったことありませんのですみませんがわかりません。
(^^)/~~~
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
もう一度、改めて最初からやり直しましたら、うまく言っております。

XPでは、ちょっとトラブルが続いているものですから(2000ではうまくいっているのにというものが)。

何回も回答を頂き、本当に感謝しております。

またの機会によろしくお願いいたします。

お礼日時:2001/08/31 10:52

>もう少し、詳しく教えていただけるとありがたいのです。


ワークシートの「名前を付けて保存」の「ファイルの種類」で
「Microsft Excel アドイン」拡張子xlaで保存。

「ツール」-「アドイン」で該当するアドインにチェックボックスにチェック
をいれてアドインを登録。

参考URL:http://pcgaz.nikkeibp.co.jp/excel/229.shtml
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。
「アドイン」にした方が処理が早くなるということですね。
実は、この質問をする前に、「アドイン」登録処理を一度行っています。
ですが、そのとき、個人用マクロブック(Personal.Xls)とPersonal.Xlaという二つのファイルが出来てしまい、どのブックを開いても、この二つが自動的に立ち上がり、ちょっと混乱してしまったのです。

 アドインに登録するということは、Personal.xls が不要で、Personal.Xls をPersonal.Xla として保存するということなのでしょうか。

 よろしくご教授のほどお願いいたします。

お礼日時:2001/08/29 09:02

アドインにした方が処理が速くなると思いますが・・・?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ですが、アドインについては、よくわかならないのです。
ヘルプを読んでみましたが、具体的にはどうすればよいのか.....
もう少し、詳しく教えていただけるとありがたいのです。
よろしくお願いいたします。

お礼日時:2001/08/25 06:53

出来るはずですが・・・。


コードを間違えてるとかないですか?(スペル等)

手順をもう少し詳しく書かれたほうが回答がつきやすいので?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
遅くなりましたが、やっと方法がわかりました。

内容については i-harada さんへのお礼の中に記述しました

これからも何かありましたらよろしくお願いいたします。

お礼日時:2001/08/23 15:55

i-haradaです。



間違ってたらすいません。
同じブック内にあるマクロしか利用できないような記憶が有ります。
大分探したのですが、書かれたものが見つかりませんでした。
もう一度調べます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
遅くなりましたが、やっと方法がわかりました。

参照元のマクロのモジュール名を変更して参照設定を行う。

これが回答でした。 でも、私にはこの意味がすぐに理解できませんでした。
一般にマクロを作成すると、モジュール名がVBAProjectとなっており、これだと参照設定が出来ないので、この名称を変えてやる必要があるということでした。
 いろんな方面で探して、やっと見つけました。
 遅くなりましたがありがとうございました。
 これからも何かありましたらよろしくお願いいたします。

お礼日時:2001/08/23 15:50

この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)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


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

QSubではなくFunctionで作られる理由

access2007を使っています。

素朴な疑問なのですがマクロを変換した時はなぜ
Subプロシージャーではなく、Functionなのでしょうか?

「クエリを開く」と言うマクロを、VBAに変換したところ
*******************************************************
Function マクロ1()
On Error GoTo マクロ1_Err

DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit


マクロ1_Exit:
Exit Function

マクロ1_Err:
MsgBox Error$
Resume マクロ1_Exit

End Function
*******************************************************

となりました。

戻り値や返り値はないものは、FunctionプロシージャーではなくSubプロシージャーで作るものと思っていたのですが
なぜ上記のコードはFunctionなのでしょうか?

Functionで作る理由を教えてください。
特に意味はないのでしょうか?

ちなみにFunctionをSubに書き換えて実行したら問題なくクエリが開きました。

access2007を使っています。

素朴な疑問なのですがマクロを変換した時はなぜ
Subプロシージャーではなく、Functionなのでしょうか?

「クエリを開く」と言うマクロを、VBAに変換したところ
*******************************************************
Function マクロ1()
On Error GoTo マクロ1_Err

DoCmd.OpenQuery "クエリ1", acViewNormal, acEdit


マクロ1_Exit:
Exit Function

マクロ1_Err:
MsgBox Error$
Resume マクロ1_Exit

End Function
*************************************...続きを読む

Aベストアンサー

推測の域を出ませんが、
マクロから直接呼び出せるプロシージャはFunctionだけです。
Subの場合はFunctionモジュールで包んであげる必要があります。
この辺りの都合上でFunctionになってしまっているのかな?と。

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マクロのマスター検索のルーチンで困ってます

下記のようなフローを作成し、下記のマクロを組んでみたのですが、エラーで困ってます。どなたか教えてください。
(フローを貼り付けられないので、ごめんなさい)

Sub Macro()
'必要なファイルを読み込む
Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\seihin_m.xls"
Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\s0708.xls"
Dim g_book As String
Dim m_book As String
g_book = "s0708.xls"
m_book = "seihin_m.xls"
'検索用変数
Dim M_cc As String 'マスター製品コード
Dim g_cc As String '月次製品コード

Windows(g_book).Activate
Range("A4").Select
g_cc = ActiveCell
Windows(m_book).Activate
Range("A2").Select
M_cc = ActiveCell
'If g_cc <> "" Then  '月次データーがスペースなら、END
Do While M_cc <> g_cc     ※この行と次の行でエラー
M_cc Offset(1, 0).Select
Loop

M_cc = ActiveCell.Value
Windows("売上推移.xls").Activate
Range("B1").Value = g_cc
Range("A1").Value = M_cc
'次の月次データーコードを読み込みマスターと検索に戻る
End Sub

下記のようなフローを作成し、下記のマクロを組んでみたのですが、エラーで困ってます。どなたか教えてください。
(フローを貼り付けられないので、ごめんなさい)

Sub Macro()
'必要なファイルを読み込む
Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\seihin_m.xls"
Workbooks.Open Filename:="C:\Documents and Settings\Administrator\My Documents\売上げデーター\s0708.xls"
Dim g_book As String
Dim m_book As String
g_...続きを読む

Aベストアンサー

#01です。
>Worksheets(AA)
>Worksheets(0708)

シート名を指定するときは
Worksheets("AA")
Worksheets("0708")
のように引用符で囲む必要があります。

あと、「エラーになりました」と書く場合は必ずエラーコードを書きましょう。今回の場合はミスが明らかななのでよいですが、エラーコードがないとわからない場合も多いです。

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


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

Qマクロ ブックをマクロなしでコピー

いつもお世話になっております。
マクロのことで
2つ教えて頂きたく書き込みをさせて
いただきまいした。
よろしくお願いいたします。

ブックに何枚かシートがあり、
そのシートには全て同じマクロが入ってます。
このブックのシート全てを
マクロを削除し新しいブックにコピーをしたいです。
また、コピーをする際に
マクロがついているオブジェクト(ボタン)
もとってコピーをしたいです。

自力で調べたのですが
うまくわからずまた、こちらで質問
させていただきました。

よろしくお願いいたします

Aベストアンサー

こんにちは。

基本的には、#1さんのマクロでよいはずです。
マクロでマクロコードを操作するのは、ウィルスライクになるので、それは、掲示板で、あまり書くのは好ましくありません。

以下のコードを、標準モジュールに以下を入れてください。

使い方は、マクロを実行すれば、新しいブックにマクロなしで、コピーされます。
一つないし、複数のシート(作業グループ)を選択したものをコピーしたい場合は、以下の行頭の(')コメントブロックを外します。

 'Set sWh = ActiveWorkbook.Worksheets
 ''選んでコピー
 Set sWh = ActiveWindow.SelectedSheets

ただし、以下の現在のマクロは、ワークシート以外のグラフシートは、コピーできません。多少、以下のマクロには、いろんなシートの形態が混じると、問題が出てくるとは思いますが、通常の使用ならトラブルはないと思います。

---------------------------------------------

Sub SheetsCopy()
  Dim i As Integer
  Dim j As Integer
  Dim sh As Object
  Dim sWh As Sheets
  Dim msg As String
  'すべてコピー
  Set sWh = ActiveWorkbook.Worksheets
  
  ''選んでコピー
  'Set sWh = ActiveWindow.SelectedSheets
  
  With Workbooks.Add
    If i > .Worksheets.Count Then
      .Worksheets.Add After:=.Worksheets(.Worksheets.Count), _
      Count:=i - .Worksheets.Count
    End If
    j = 1
    For Each sh In sWh
      If TypeName(sh) = "Worksheet" Then
        sh.Cells.Copy .Sheets(j).Cells(1, 1)
      Else
        msg = msg & "," & sh.Name
      End If
      j = j + 1
    Next sh
  End With
  If Len(msg) > 2 Then
    MsgBox Mid(msg, 2) & " は現在のマクロではコピーできません。", 64
  End If
End Sub

こんにちは。

基本的には、#1さんのマクロでよいはずです。
マクロでマクロコードを操作するのは、ウィルスライクになるので、それは、掲示板で、あまり書くのは好ましくありません。

以下のコードを、標準モジュールに以下を入れてください。

使い方は、マクロを実行すれば、新しいブックにマクロなしで、コピーされます。
一つないし、複数のシート(作業グループ)を選択したものをコピーしたい場合は、以下の行頭の(')コメントブロックを外します。

 'Set sWh = ActiveWorkbook.Worksheets
 ...続きを読む

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【VBA】「時間+日付.xls」ファイルの作成

vbaで
「Shell ("cmd /C copy """ & 」を使用し、
今日の日付と時間を名前にしたエクセルファイル( Time$ & Time$ をファイル名にして)を作成しているのですが

Date$ →2009-05-12
は、エラーになることなくファイルが作成できるのですが
Time$→16:00:24
は、↑の様に「:」が入ってしまう為エラーになってしまいます。


VBAを使って現在の「時間+日付.xls」を作成するにはどうしたらよいでしょうか?

ちなみにnow$はライブラリにすらありませんでした。
ご教授よろしくお願いします。

Aベストアンサー

 ファイル名にコロンは使えないと存じます。

Date$ & " " & Replace(Time, ":", ".")
のようにコロンをピリオドなどに変換されてはいかがでしょうか?

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における「=」とは少し意味合いが違っています。

Qエクセル:複数ブックをマクロを使い同一条件で集約・抽出したい

教えて下さい
複数のエクセルブックがあります(全て1フォルダーに集約してある)
それぞれA列に日付、B列に金額が入っている
複数あるブックを指定する日付で次から次へと検索しその金額とファイル名を新しいブックに縦に全てコピー(抽出)したい
ちなみに、必ず条件にあうデータがそれぞれのブックにあるとは限りません 無い場合もあります 無い場合は特に抽出する必要はありません
=========================================================
例:2007/12のデータを抽出したい

★抽出結果イメージ
   A      B    C
1 2007/12   200   ああああ.xls
2 2007/12   300   いいいい.xls
3 2007/12   100   うううう.xls
4   ・      ・      ・
5   ・      ・      ・
6   ・      ・      ・
7   ・      ・      ・

=========================================================
このような場合、マクロでできますか?マクロは初心者です
教えてください よろしくお願いします
複数あるブックとは数的に60とかあります

ちなみに現状はファイルを一つ一つ開き、指定日付を検索し見つけだし
その行をコピーペーストしています
たくさんブックがあるので、これをしていると目がチカチカしてきてしまいます

この作業がマクロでできると、すごく感激なのですが・・・
どなたか、お知恵・お力をおかしくださいませ

教えて下さい
複数のエクセルブックがあります(全て1フォルダーに集約してある)
それぞれA列に日付、B列に金額が入っている
複数あるブックを指定する日付で次から次へと検索しその金額とファイル名を新しいブックに縦に全てコピー(抽出)したい
ちなみに、必ず条件にあうデータがそれぞれのブックにあるとは限りません 無い場合もあります 無い場合は特に抽出する必要はありません
=========================================================
例:2007/12のデータを抽出したい

★抽出結果イメー...続きを読む

Aベストアンサー

私なら
(1)1本のファイルに集約化します。
  (A)集約して65536行以内ならエクセルに
  (B)それ以上だとアクセス)に
(1)(A)の場合として
マスターすべき課題
(2)フォルダの全ファイル(=ブック)を次々処理する方法
For Each・・
(3)ブックのシートが複数ある場合なら、各シートを次々処理する方法
For Each・・
(4)データの最下行を知る方法
(5)データを一本に結合する方法
ーー
結合したファイルができたら、
(7)日付列でソートする
(8)日付が変わるまで金額を足しこみ、変わると直前までの合計と直前の日付をエクセルシートに書き出す。
合計をご破算して、今回行以下について、加算を繰り返す
ーー
アクセスの場合はデータさえ移してしまえば、後は簡単。
(SQL文の勉強)
ーーー
以上コードを作るのは、本質問コーナーの趣旨に反し、私も根気と
時間と回答許容行数がない。
(2)(3)(4)などはWEB照会すれば沢山例が載っている。
(7)はマクロの記録で判る。


人気Q&Aランキング

おすすめ情報