
https://tonari-it.com/excel-vba-invoice-macro/のサイトのファイルを元に、
企業別ではなく、Dr別に依頼表を作成したいと考えています。
サイトの「請求データ」のデーターベースは、次のように考えています。
患者ID・患者名・入院日・退院日・医師コード・依頼先医師名とし、医師名は重複し、別の医師名もあります。
サイトの「取引先マスタ」のデーターベースは、次のように考えています。
医師コード・依頼先医師名とし重複はありません。
また、inputboxの日付での抽出入力は不要と考えています。
サイトの「請求書ひな形」は次のように考えています。
______________________
依頼票 |
Drへ |
依頼日:印刷日当日 |
期限:印刷日月末 |
|
○○の件で~ |
|
~よろしくお願いします。 |
患者ID|患者名|入院日|退院日 |
| | | | | |
| | | | | |
|
______________________|
VBA実行後、
デスクトップにDr別のファイルができるようになりたいのです。
______________________
依頼票 |
YDrへ |
依頼日:2019/9/1 |
期限:2019/9/30 |
|
○○の件で~ |
|
~よろしくお願いします。 |
患者ID|患者名|入院日|退院日 |
|12345| A |1/1 |1/2| |
|54321| B |5/3 |5/5| |
|
______________________|
______________________
依頼票 |
ADrへ |
依頼日:2019/9/1 |
期限:2019/9/30 |
|
○○の件で~ |
|
~よろしくお願いします。 |
患者ID|患者名|入院日|退院日 |
|78910| C |1/5 |1/10| |
|04789| B |3/3 |7/5 | |
|
______________________|
どう削ったらいいのかわかりません。
セルの位置は特にこだわっていないのでサイトのテンプレの位置で考えています。
変更して何度もチャレンジしていますがエラーばかり出ます。
詳しい方、教えていただけないでしょうか。
__________________________________________
Sub 請求書作成()
'rowsData=請求データの最終行数
'rowsClient=取引先マスタの最終行数
'wsData=請求データ
'client=取引先
'ws=請求書ひな形
Dim rowsData As Long, rowsClient As Long
rowsData = wsData.Cells(Rows.Count, 1).End(xlUp).Row '請求データの最終行数
rowsClient = wsClient.Cells(Rows.Count, 1).End(xlUp).Row '取引先マスタの最終行数
'年月を入力ダイアログで入力
Dim dayCutoff As Date
dayCutoff = Application.InputBox("年月を入力してください", "対象年月を入力", Format(Date, "yyyy/mm"))
Dim n As Long
For n = 2 To rowsClient '取引先マスタの2行目から最終行まで
Dim client As String
client = wsClient.Cells(n, 1).Value '取引先マスタの1列目
'ひな形ブックを開きそのシートとともにセットする
Dim wb As Workbook, ws As Worksheet
Set wb = Workbooks.Open(ThisWorkbook.Path & "\請求書ひな形.xlsx") '請求書ひな形ファイルを開きwbファイルに格納
Set ws = wb.Worksheets(1) '請求書ひな形をwsに格納
'該当の取引先かつ年月のデータを転記する
Dim i As Long, k As Long
k = 21
For i = 2 To rowsData 'for~nextがやってる
If wsData.Cells(i, 2).Value = client Then '請求データの取引先名がクライアント名と等しいとき
Dim deliDate As Date
deliDate = wsData.Cells(i, 1).Value 'deliDateは請求データの納品日
If Year(deliDate) = Year(dayCutoff) And Month(deliDate) = Month(dayCutoff) Then 'inputboxの値と等しければ実行
wsData.Range(wsData.Cells(i, 3), wsData.Cells(i, 5)).Copy ws.Cells(k, 1) '請求データの3~5列目の範囲をコピーする、そのコピー先はWSである請求書ひな形のA21に
k = k + 1 'やったら1プラスで位置がずれる
End If
End If
Next i
'その他の転記と行の非表示
ws.Rows(k & ":50").Hidden = True 'データがない行を隠す
ws.Range("A18").Value = "ご請求金額:" & Format(ws.Range("D54").Value, "#,##0") & " 円"
ws.Range("A3").Value = client & "御中" '取引先名、取引先マスタらか引っ張ってくる
ws.Range("A5").Value = "〒" & wsClient.Cells(n, 2).Value '郵便番号
ws.Range("A6").Value = wsClient.Cells(n, 3).Value '住所1
ws.Range("A7").Value = wsClient.Cells(n, 4).Value '住所2
ws.Range("D15").Value = DateSerial(Year(dayCutoff), Month(dayCutoff) + 1, 0) '請求日
ws.Range("D16").Value = DateSerial(Year(dayCutoff), Month(dayCutoff) + 2, 0) 'お支払期限
'ファイル名を生成して保存して閉じる
Dim fileName As String
fileName = ThisWorkbook.Path & "\" & Format(dayCutoff, "yyyymm") & "請求書_" & client & ".xlsx"
wb.SaveAs fileName
wb.Close
Next n
End Sub
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんにちは、
やりたい事は、理解できますが、修正などアドバイスするに至る情報が足りません。
掲示のサイトでのコードには、エラーはなく実行されると思います。
また、処理などをブロック分けしており、比較的容易に流用、改造できると思います。
従って、表組や引数あたりが問題なのでしょうが、どのような修正で、
どこでエラーになっているか?表組がどのような形(Rangeアドレス)なのか、示さないと判りません。
印刷レベルで配布するような記載ですが、A4用紙にテンプレート2枚分の出力なのでしょうか?
などなど、補足情報が必要ですね。
No.2
- 回答日時:
VBA初心者です。
No1さんに同意です。
リンク先のソースをそのままコピペされるよりも、ご自身でどこまでソースをつくられたのか、どこでつまづいているのかを書かれた方が適切な回答が得られると思いますよ。
それと一度VBAでつくるとあとが大変ですよ。様式も今後変わらず、貴方がつくって将来にわたって貴方だけが使用するのなら問題はないのですが、修正や人事異動はつきものです。一度つくってしまうと、あとあとまでそのVBAのメンテナンスが個人に付いて回ります。
何かあったら、作った人間が無償で修正するのがあたり前で、どこに異動してもついてまわる、そして上手く動かなければ「こんな不便な物を作りやがって」「こんなのは使い物にならない」と批判されるのがおちです。
ご自身がVBAのスキルが高ければ良いのですが、そうでなければヘタに手出しをしない方がよろしいかと思いますが。
No.1
- 回答日時:
正直リンク先のコードを出されても意味ないと思います。
(リンク先に書かれてるものですよね?)あなたが手こずっているコードの方が重要だと思います。
重要なのは『実際のデータベース』がどのように作られているのか?にあるのですから。
それにリンク先の
>「取引先マスタ」のデーターベース
は別に要らないでしょ。
ただそちらでどうしても必要と言うなら別ですけど、医師コードは医師が変わって(退職等)もそのまま残すの?
>医師名は重複し、別の医師名もあります。
依頼する医師が患者によって重複する場合はわかりますし、その重複はなくしてデータを取得は可能でしょ。
でも『別の医師名』って何を指してます?
それよりかは『どこまで依頼を達成したのか』の見極めるチェック欄が必要なのでは?
それとも患者が退院日を過ぎて退院したら、そのデータは保管せず1行丸々削除するのでしょうか?
ここで気になったのは、退院日は入院日確定と共に確定されるのか?ですよね。
退院予定日ってならわかりますけど。
あと年を越して入院した場合の対応はなし?
と色々書きましたけど、うちのExcelは化石化しているものなので期待はされないように。(たまにしかここは訪れませんし)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
主治医と患者として出会い結婚...
-
病院で学生(医師の卵)に見せ...
-
可愛い子の診察は長い?
-
医師は患者の心をどう考えてい...
-
まともな医師なら自分の患者の...
-
主治医を好きになってしまった
-
ヒューマンネットワークって何?
-
こんな医者って許されるのですか?
-
医師から受けた診療拒否について
-
保険会社の対応に絶句です。ど...
-
告知について
-
麻酔後の安静時間が科によって...
-
医者ってなるのは難しいけど仕...
-
医師はまさか患者に見限られて...
-
延命措置ってどういう意味ですか?
-
尊厳死の実態
-
明らかに間違った解答は訂正す...
-
医者の判断、治療に疑問を感じ...
-
診療報酬引下げと保険医総辞退...
-
それぞれの回答お願いします。
おすすめ情報