今、アクセス2000を使ったちょっとしたデータベースシステムを構築してます。
その中で、マクロを使ってレポートのカレントレコードだけを印刷させたいのですが、データベース全体のレコード全件が印刷されてしまいます。
どなたか、カレントレコードだけをマクロ印刷させる方法をご存知の方ご教授下さい。よろしくお願いします。

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

A 回答 (2件)

ん~VBAってそんなに難しいかな?


とりあえずマクロのやり方書くけど・・・前のカット&ペーストしてみてね!

マクロを選択してツールのマクロの「マクロをVisual Basicに変換」して
必要な部分だけ切り取っただけだし・・・。前回記述したことを忠実に実行
するだけで、カッコいい感じで使えますよ。

説教ではありません。不愉快だったらごめんなさい!

>[Aテーブル]![id]=[Forms]![Aフォーム]![id]
で出来ます。
解説すると連番が必要だって前に説明しましたよね。
1~200件位だっけ?※無い場合はムリ!がんばって付けてね。
厳密には方法が無いわけじゃないけど、説明が長くなるからムリ!

その番号を仮にIDとします。
元になる(200件入っている)テーブルをAテーブルとします。
そのテーブルを元に作ったフォームをAフォームとします。

難しく考えないで「Aフォームに表示されている数字(ID)=Aテーブルにある
レコードを印刷してください!」となる。

もっと簡単にいうと画面に見える物と同じレコードを印刷しなさい!となる。
私も始めて「マクロ」って作りましたが、動きました。

※ちょっと質問
1.フォームって使ってるよね?
2.コンボボタンとかも使ってるよね?
出来なかったら・・・追記してね。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。できました!!
構文は[Aテーブル]![id]=[Forms]![Aフォーム]![id] だったんですね。
私は[Aレポート]![id]=[Forms]![Aフォーム]![id] とやってしまって上手くいかなかったんです。
(マクロを実行すると)全件がいきなり印刷されたり、パラメーターの入力を求められたりと、もーワケわからん状態だったので、スッキリしました。
心の余裕ができたので、VBAの方もやってみます。

お礼日時:2002/03/05 23:58

マクロはあまり使わないので間違っていたら御免なさい!


「印刷」を行うときには、「レポートを開く」を選択しますよね?
その際にWhere条件ってのが存在すると思うんですけど、そこにSQL文を
書くことになると思います。

※印刷の際カレントレコードのみ出力するにはIDのような「キー」が必要に
なります。まあ重複しない数字ですよね。
↑があると仮定します。単純に「=ID」のような記述ではないのでしょうか?
詳細がわからないとこれ以上はムリですね!

AccessVBAで書くとしたら↓
適当なフォームにボタン(コマンドボタン)を付ける所までは一緒です。
プロパティ→イベント→クリック時にマクロの設定してますよね?
そこを
プロパティ→イベント→クリック時に右側の「...」三点リーダーみたいな
のをクリックして「コードビルダ」を選択して下さい。
Private Sub コマンド0()
End sub
↑って画面が出てくると思うんですけど、そこに↓をカット&ペーストして
下さい。※ちゃんとPri~の後にスペースを空けてEnd~の間に入れてね!

'----------------------更新・印刷作業-----------------------

Dim lngID As Long   '変数宣言ってやつです。
Dim kosyin As Integer  
'Dimはお約束→Kosyin適当な名前→asもお約束→Integer(数字)型が入ります。

'保存
kosyin = MsgBox("更新しますか?", vbYesNo)
If kosyin = vbNo Then
'Noだったら
Exit Sub
'閉じる
End If
DoCmd.RunCommand acCmdSaveRecord  'レコードの保存

'印刷
lngID = MsgBox("印刷を行いますか?", vbYesNo)

If lngID = vbNo Then
Exit Sub
End If
'上は同じ事してる。

'ここからが印刷ね!
lngID = Me.txt1.Value

'さっき変数宣言した適当な名前の中にIDを入れます。
'IDはさっき開いていたフォームのテキストボックスに表示されていることが条件
'IDのテキストボックスの名前を[txt1]の所に入れてみて!

DoCmd.OpenReport "印刷", acViewPreview, , "lngID=" & lngID
'acViewPreview を選択するとプレビュー acViewNormalは印刷
'ここは印刷を行う所です。「印刷」の所に自分のレポート名を入れてみてね。
'以上で更新作業から印刷までの流れです。
'マクロ使うより軽く出来るし、何よりカッコいいでしょ?(笑)

'質問があれば、追記してください。(暇な時に返事します。)
    • good
    • 0
この回答へのお礼

 大変親切なご回答ありがとうございます。VBAの方は私のスキルではついて行けませんので、マクロの式をご教授頂けると助かるのですが……
 前提条件はご推察の通りです。マクロの「レポートを開く」をフォーム上のボタンに貼り付けてます。そこでWhere条件にどういう構文を入力すれば良いのかでつまづいてます。今、仮に200件あるデータのうち5番目のデータがフォームとして画面上に表示されていたとします。この5番目のデータだけをレポートとして印刷させたいのですが、上手くいかないのです。1番目から全件のデータのレポートが出力されてしまいます。
 時間が出来ましたら、教えてくださいませ。

お礼日時:2002/03/03 00:07

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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


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

QAccess レコード削除時に「カレントレコードがありません」エラーが表示されてしまう

いつもお世話になっております。

フォームに「レコードの削除」ボタンを作成して実行したところ、
「カレントレコードがありません」と表示されてしまいます。
削除そのものは、正しく行われている(削除したいレコードが削除されている)のですが、
なぜ、そのようなメッセージが出てしまうのか分かりません。

他のフォームでは、削除するレコードが最後のレコードで無い限り、
そのようなメッセージは出ません。
また、そのフォームのレコードソースになっているクエリでは、
問題なく削除が実行されます。

削除ボタンの作成は、コントロールウィザードを使って行いました。
ちなみにVBAでは下記のような記述になっています。

Private Sub 削除テスト_Click()
On Error GoTo Err_削除テスト_Click


DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

Exit_削除テスト_Click:
Exit Sub

Err_削除テスト_Click:
MsgBox Err.Description
Resume Exit_削除テスト_Click

End Sub

メッセージを表示させないためには、どのようにしたら良いでしょうか??
また、最後のレコードを削除した場合にも、
「カレントレコードがありません」メッセージを表示させなくするには
どのようにしたら良いでしょうか?
教えてください。

いつもお世話になっております。

フォームに「レコードの削除」ボタンを作成して実行したところ、
「カレントレコードがありません」と表示されてしまいます。
削除そのものは、正しく行われている(削除したいレコードが削除されている)のですが、
なぜ、そのようなメッセージが出てしまうのか分かりません。

他のフォームでは、削除するレコードが最後のレコードで無い限り、
そのようなメッセージは出ません。
また、そのフォームのレコードソースになっているクエリでは、
問題なく削除が実行さ...続きを読む

Aベストアンサー

>On Error Go To 0で試してみたのですが、
>やはり「カレントレコードがありません」表示がされてしまいます。

あ、いや、On Error GoTo 0 じゃなくて On Error Resume Next を使ってください、って書いたつもりだったんですが・・・。まぁ、他の方法で回避できたみたいなので、いいんですけど。

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アクセス(MSAccess)でカレントデータベースのパスを取得するには?

■MS Accessでカレントデータベースのパス(ファイル名まで)を取得できるのでしょうか?

[テキストボックス]の[コントロールソース]に使用する場合、
"=CurDir$()"を使えばデータベースのパスまでは取得できますが、
"c:\my documents\data.mdb"といったように、データベース名まで
取得する方法を教えてください。

Aベストアンサー

"=CurDir$()" に倣って書けば "=CurrentDb.name" でいいと思います。
でも "=CurDir$()" では文字通り現在のディレクトリを示すだけで
そのとき開いているデータベースのパスを示さないのではないでしょうか?

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「リレーショナルデータベース」と「データベース」

「リレーショナルデータベース」と「データベース」は何が違うのでしょうか?
accessはリレーショナルデータベースとの事ですが,普通のデータベースと何が違うのでしょうか?

[データベースはこうだけど、リレーショナルデータベースはこうだよ!]
って教えて頂ければ助かります。

Aベストアンサー

データベースというのはデータの集まりのことで、ソフトウエアのことではありません。データベースという用語は法律でも定義されています。
著作権法第2条第1項十の三
 データベース 論文、数値、図形その他の情報の集合物であつて、それらの情報を電子計算機を用いて検索することができるように体系的に構成したものをいう。

リレーショナルデータベースとは複数のデータベースを組み合わせて(関連付けて)一体として管理するデータベース構造(スキーム)のことであり、組み合わされる個々のデータベースのことはテーブルと呼びます。もちろんリレーショナルデータベースもデータベースの一種です。上記の法律の条文に照らしてみれば明らかでしょう。
EXCELのような表計算ソフトでもデータベース(テーブル)を構築することはできますが、リレーショナルデータベースを構築するには専用の管理機構が必要で、表計算ソフトでは構築不能です。

Accessのようなソフトはこのデータベースを管理・操作するためのソフトウエアであり、分類上「データベースソフト」あるいは「DBMS(データベース・マネジメントシステム)」と呼ばれます。素人向けはデータベースソフト、業務用はDBMSと呼ぶのが普通です。なお、マイクロソフトではAccessのことを、一般向けにはデータベースソフトウエアと呼び、技術者向けにはDBMSと呼んでいるようです。これらのソフトウエアで管理・操作する対象がデータベースでありリレーショナルデータベースなのであって、Accessなどのソフトウエアがデータベースなのではありません。

パソコンが仕事で使われることの少なかった初期(主にホビー・家庭用途)は、パソコン上で動作するデータベースソフトは「カード型」などのリレーショナル機能のないものが主流でした。住所録管理程度であればこれで十分でしたし、当時の表計算ソフトは現在のような大量データは扱えませんでしたから(最大500行とか)、Windows普及以前はデータベースソフトと言えばリレーショナル機能のないカード型ソフトが家庭や零細企業では普通に使われていました。
リレーショナルデータベースがあっても高価で(ビジネス用で一番普及していたdBASEは定価268,000円だったはず)、システム構築も簡単ではないので、システム化の進んだ大手企業やその関連会社でもなければ導入していないのが普通だったと思います。

データベースというのはデータの集まりのことで、ソフトウエアのことではありません。データベースという用語は法律でも定義されています。
著作権法第2条第1項十の三
 データベース 論文、数値、図形その他の情報の集合物であつて、それらの情報を電子計算機を用いて検索することができるように体系的に構成したものをいう。

リレーショナルデータベースとは複数のデータベースを組み合わせて(関連付けて)一体として管理するデータベース構造(スキーム)のことであり、組み合わされる個々のデータベー...続きを読む

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がインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

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

QACCESSのクエリーで元のデータベースにレコードほ追加したい

クエリーで作成したデータベースに、違ったクエリーを使い、そのデータベースにレコードを追加して行きたいのですが、どうすればよいのか手順をご教授お願いします。 ここだけが出来ないので困っています。 宜しくお願いします。

Aベストアンサー

>クエリーで作成したデータベース
これは仮想のもので、クリックするごとに毎回作り直されます。
だからデータベース(テーブルとはいえないことははっきりしている)と言えるかどうか、疑問があります。
>違ったクエリーを使い
選択クエリですか。はじめとどのように違った条件なんでしょうか。
たとえば、はじめは東京在住の人、次は千葉県に在住の人、これらを合わせて、テーブルを作るのでしょうか。フィールドの数や内容は両者で同じですか。
それ(同じ)なら条件をOR条件にすればよい。
東京の人のテーブル、千葉の人のテーブルが出来上がっていて、両者を合体させたいのでしょうか。
●クエリは簡単にテーブル化できるのをご存知ですか。
>クエリーでテーブルを作成するのですね、に対し「できる」のであって
必ずするものではない。
テーブルは入力やインポートでできるのが普通で、クエリで必ず作るものでは
ない。
●追加クエリというのがあるので、本で調べてください。
http://www.mahoutsukaino.com/ac/ac2000/ac2000/actionq/action02.htm
●ユニオンクエリというのもあります
http://www.nurs.or.jp/~ppoy/access/access/acQ008.html
>余り、ほとんどACCESSを知らないもので・
このため質問の真意が伝わりにくい。
むしろ「したいこと」を、できるだけさらけ出して、自分のやっている方法は控えめにして、質問したほうが、よい助言がもらえるでしょう。変に知ってる方法を質問の中に混ぜるより、この方法をお勧めします。

>クエリーで作成したデータベース
これは仮想のもので、クリックするごとに毎回作り直されます。
だからデータベース(テーブルとはいえないことははっきりしている)と言えるかどうか、疑問があります。
>違ったクエリーを使い
選択クエリですか。はじめとどのように違った条件なんでしょうか。
たとえば、はじめは東京在住の人、次は千葉県に在住の人、これらを合わせて、テーブルを作るのでしょうか。フィールドの数や内容は両者で同じですか。
それ(同じ)なら条件をOR条件にすればよい。
東京の人...続きを読む

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

QExclデータベース用マクロについて

データベース用マクロを作っています。
sheet1のA列の中で文字検索を行い「入社」であればsheet2にある人事データベースに検索でかかった行ごとコピーしデータベースの一番下の行に貼り付ける。「異動」であればB1の「社員コード」から検索し、新しい上書き。「退社」であれば削除を行いたいと思っています。どのようにマクロを組めばよいのでしょうか。よろしくお願いします。

Aベストアンサー

こんばんは。

シートの状態が分かりませんので、では、こちらで、想像で割り振らしていただきます。
ただ、本来は、こういう具体例をご質問者から、出していただきたいのです。

Sheet1

  A   B   C
1 処遇 コード 名前....
2 退社  3   あ  
3 異動  4   か  
4 入社  20   さ 


Sheet2

  A   B    C
1 コード 名前  データ1...
2  3   あ   
3  4   か   
4  

Sub testsample()
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim r As Range, c As Range
Set Sh1 = Worksheets("Sheet1")
Set Sh2 = Worksheets("Sheet2")
For Each c In Sh1.Range("A2", Sh1.Range("A65536").End(xlUp))
Select Case c.Value
Case "入社"
 c.Offset(, 1).Resize(, 255).Copy Sh2.Range("A2").End(xlDown).Offset(1)
 'B列より、右端255行を、シート2のA列の最後尾の次にコピーする。
Case "異動"
 Set r = Sh2.Columns(1).Find(c.Offset(, 1).Value, , xlValues, xlWhole)
 If Not r Is Nothing Then c.Offset(, 1).Resize(, 255).Copy r
 'コードを検索して、その見つかったものを上書き
Case "退社"
 Set r = Sh2.Columns(1).Find(c.Offset(, 1).Value, , xlValues, xlWhole)
 If Not r Is Nothing Then r.EntireRow.Delete
 'コードを検索して、その見つかったものを削除
End Select
Next
End Sub

こういうコードを参考にして作ってみてください。

なお、こういうのは、データベースとはかなり違ったものです。Excel自体で本格的なデータベースが使えますが、プロのプログラマの知識が必要な技術のひとつです。Excelで本当にデータベースを使える人は、Access も使えますが、Accessのほうがはるかに便利で易しいです。

こんばんは。

シートの状態が分かりませんので、では、こちらで、想像で割り振らしていただきます。
ただ、本来は、こういう具体例をご質問者から、出していただきたいのです。

Sheet1

  A   B   C
1 処遇 コード 名前....
2 退社  3   あ  
3 異動  4   か  
4 入社  20   さ 


Sheet2

  A   B    C
1 コード 名前  データ1...
2  3   あ   
3  4   か   
4  

Sub testsample()
Dim Sh1 As Worksheet, Sh...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報