dポイントプレゼントキャンペーン実施中!

初めまして、VBA初心者です。
エクセルVBAについてご教示お願いします。

A列        B列    C列    D列   E列
管理番号      名称   投資    計上   金額
BP00100FUJITA  小型機   2024/09 2024/10 4,000
BP00300TAKEDA 転写機    2024/10 2024/10 6,000
BP00500ENDO   電気炉    2024/09 2024/09 8,000
BP00501ENDO   測定装置   2025/05 2025/02 5,000

上記のようなデータがあり、これを添付のデータに転記したいのです。
添付のものは同じ形式で投資用・計上用があります。

質問としまして
①A列(管理番号)のBP●●500~とBP●●501~を、添付の11~14行目(同じ名称)の該当する月度に金額を転記することは可能でしょうか?

②C列の投資、D列の計上の月度が違う場合、それぞれ添付の投資エクセルには●月度、計上エクセルには●月度、に金額を転記することは可能でしょうか?

出来ればサンプルコードをいただけると助かります。。

「エクセルVBA、別ブックへ転記する。につ」の質問画像

質問者からの補足コメント

  • 転記元も転記先も、拡張子はxlsxでした。(補足質問の見落としすみません……)

      補足日時:2024/05/17 13:47
  • また、転記先のフォルダをいくつか作ると先に進んだため、別のエラーのご相談なのですが、
    〇転記先ブックのシートチェック のメッセージボックス「転記先ブックの2つのシートの行数が不一致です」が出てしまいます。
    たしかに投資、計上の見えている行?がちがうようなのですが、どの部分を変えれば良いかわからず……
    「国内_連結修正後」はD列から、「国内_計上連結修正後」はE列から始まっていることに気付き、(非表示になってました)これが問題なのかな?と思っております。
    いくつも聞いてすみません、解決策などありますか……?

      補足日時:2024/05/20 14:03
  • ここまでしっかり作りこんでいただけると思ってませんでしたので、添付の画像はざっくり伝わればいいや、とわたしが制作したものです。
    実際のエクセルシートを添付しますので、どうぞよろしくお願いいたします。
    こちらは計上のシートになります。
    非表示の列の違いはありますが、内容は同じです。

    「エクセルVBA、別ブックへ転記する。につ」の補足画像3
    No.10の回答に寄せられた補足コメントです。 補足日時:2024/05/21 08:38
  • 装置名変換そのものが動いてないようなのです。
    管理へは添付のように入力しているのですが、(これは転記先に装置名があるのを確認済みです)変換結果シートが白紙になってまして……

    「エクセルVBA、別ブックへ転記する。につ」の補足画像4
    No.17の回答に寄せられた補足コメントです。 補足日時:2024/05/21 13:47
  • D6125シート内に記載されているデータです。
    先程の補足に添付した促進槽も、転記されていないので添付いたします。

    「エクセルVBA、別ブックへ転記する。につ」の補足画像5
    No.20の回答に寄せられた補足コメントです。 補足日時:2024/05/21 15:29
  • 転記先データに転記されていないのですが、画像が小さいので見えますかね……?

    「エクセルVBA、別ブックへ転記する。につ」の補足画像6
    No.20の回答に寄せられた補足コメントです。 補足日時:2024/05/21 15:31

A 回答 (30件中1~10件)

下記にアップしました。


https://ideone.com/WnG1nQ
装置名が空白でない行の予測と実績を0クリアします。
    • good
    • 1

>最初に指定するフォルダの位置なのですが、このマクロ入りExcelが入っているフォルダ、と指定したい場合、なんと入れればいいんでしょうか?


調べたところ、ThisWorkbook.Pathなるものを見つけたのですが、これだけでは位置の指定にならないようでして……

転記元も転記先もマクロを格納してあるフォルダと同じにしたいということでしょうか。
それであれば、Folder1とFolder2を全てThisWorkbook.Pathで置き換えれば、実現可能です。
但し、Folder1とFolder2が数か所で使われているので、以下のようにした方が簡単です。

1.以下の2行をコメントアウトするか削除するかしてください
先頭に'をつけると、コメントになります。
'Const Folder1 As String = "d:\goo\data10\OUT" '転記元ブック格納フォルダ
'Const Folder2 As String = "d:\goo\data10\OUT" '転記先ブック格納フォルダ

2.その2行の下へ以下の行を追加します。
Dim Folder1 As String
Dim Folder2 As String

3.マクロの先頭で、以下の行を追加します。
Folder1 = ThisWorkbook.Path
Folder2 = ThisWorkbook.Path

Application.ScreenUpdating = False
の次へ追加しておけばよいです。

以上で終了です。
    • good
    • 1
この回答へのお礼

助かりました

共有フォルダでもちゃんと転記されました!
いろいろとありがとうございました!!

お礼日時:2024/05/22 11:25

>別件で、このマクロを他に使う方と相談したところ、転記元のブックと転記先のブックを同じフォルダにしておくほうが管理が楽、という話をいただきまして。


>今作成いただいたのですと、転記元と転記先が別フォルダにそれぞれ保存された状態からスタートだと思うのですが、同じフォルダに格納しても大丈夫でしょうか?

上記の件ですが、
同じフォルダにした場合、転記先は、ファイル名を指定して読み込むので、問題ありません。
転記元は、ワイルドカード("*.xlsx")を指定して該当するものを全て処理しているので、転記先のブックも読み込んでしまいます。
転記元ファイルのファイル名が必ず「設備投資入力」から始まることが、保証されていれば、可能です。
ワイルドカードを"設備投資入力*.xlsx"にすれば、対応可能です。

転記元と転記先のフォルダ名を同じにした場合は
64行目の
bname = Dir(Folder1 & "\*.xlsx")

bname = Dir(Folder1 & "\設備投資入力*.xlsx")
に変えてください。
そうすれば、対応可能です。
    • good
    • 1
この回答へのお礼

出来ました!
0もすべてに入っており満足してます!

何度も質問すみません。
最初に指定するフォルダの位置なのですが、このマクロ入りExcelが入っているフォルダ、と指定したい場合、なんと入れればいいんでしょうか?
調べたところ、ThisWorkbook.Pathなるものを見つけたのですが、これだけでは位置の指定にならないようでして……

お礼日時:2024/05/22 10:41

追伸:


0クリアの件ですが、最後の4行は、合計用に関数式が埋め込まれているはずなので、クリアしませんが、それで良いでしょうか。
    • good
    • 1

>ひとつご質問なのですが、転記が行われなかったセル(例えば、BP00100FUJITAだと投資は9月度に転記されるので、4月度から8月度、10月度から3月度までのセル)に0を入れるとなると、いただいたマクロにものすごい修正が必要でしょうか?



これは、転記先の2つのシート(国内_連結修正後、国内_計上連結修正後)
についてのことでしょうか。以下、その前提で進めます。
このシートは、1年間は雛型として、使用できるので、最初に、手作業で設定しておけばよいと考えていました。
このシートの行数が非常に多いということでしょうか。

もし、0を設定する場合は、転記が行われる前に、全て0に設定しておく
という方法になります。それで良ければ、可能です。
その場合、0クリアの対象となる列は4月~9月、10月~3月です。
対象となる行は、
①装置名が空白でない行(計画、前予、予測、実績)
②上記のうちの予測の行
で良いでしょうか。
(計画、前予、実績は0クリアしません。必要であればクリアも可能ですが)
    • good
    • 1
この回答へのお礼

雛形として使える件なのですが、
毎月「★【PGB】2024~2029年度 電源国内_PGB 投資予測_帳票.xlsx」を別マクロから出力しており、このブックを別フォルダへコピーするので、0を最初から入れておくことが難しいんです、、(行が多いことも要因ではありますが)
ですので、転記前に0を設定していただき、転記したときに上書きする。という方法がありがたいです。
ご説明いただいている通り、予測の行だけで問題ありません。
計画、前予に関してはすでに数値が入っている予定ですので、Oに設定しなくて大丈夫です。
予測と実績のみ0だとありがたいです。。
また、関数の入っている行も大丈夫です。


別件で、このマクロを他に使う方と相談したところ、転記元のブックと転記先のブックを同じフォルダにしておくほうが管理が楽、という話をいただきまして。。
今作成いただいたのですと、転記元と転記先が別フォルダにそれぞれ保存された状態からスタートだと思うのですが、同じフォルダに格納しても大丈夫でしょうか?

お礼日時:2024/05/22 09:56

>「転記元シート[D6110]投資月エラー」


>と出ています。
>これはシートがおかしい、ということでしょうか?

はい、その通りです。
エラーで止まったとき、エラーのセルのが選択された状態で止まります。
その内容は、どのようになっていますか。
yyyy/mm
のようになっていて、mmの値が01~12の範囲にないときにえらーになります。(1~12ではありません。01~12にないとエラーになります)
    • good
    • 1
この回答へのお礼

ありがとうございます。
シートがおかしい、セルが選択される、とご指摘いただいたので見てみたところ、空白が数行入っていました。
空白を削除したところうまく回り、

処理完了
処理ブック件数=2
処理シート件数=4
処理データ件数=40

と出ました。
新規保存されたブックに転記もされてました!
思った通りに動いており感動してます!

ひとつご質問なのですが、転記が行われなかったセル(例えば、BP00100FUJITAだと投資は9月度に転記されるので、4月度から8月度、10月度から3月度までのセル)に0を入れるとなると、いただいたマクロにものすごい修正が必要でしょうか?
であれば手入力するので問題ないのですが、ここにこのモジュール入れたらいいよ!程度であればマクロでやっていただきたいな〜と思ってしまいました……

お礼日時:2024/05/22 09:16

>No20の回答の補足ですが、


>転記先ではなく、転記されるはずの
>転記元のデータを提示していただけませんでしょうか。

転記元のデータは提示されていました。失礼しました。
パターン 転記先装置
BP0050* 促進槽 
上記が、管理シートに登録されていれば、
BP00501ENDO
BP00502ENDO
は、促進槽に転記されるはずです。
BP00500ENDOが転記先の促進槽に転記されているなら、マクロのバグの可能性があります。
BP00500ENDOが転記されていないなら、そもそも、このシートが処理されていない可能性があります。

最後に提示したマクロは、処理されたブック数、シート数、データ件数
を表示しますので、その数字を提示していただけませんでしょうか。
    • good
    • 1
この回答へのお礼

No.22のご確認内容ですが、
①の転記がすでに行われていないようなのです。
②③についてはその通りです。

本日さっそくいただいたマクロを回してみたのですが
「転記元シート[D6110]投資月エラー」
と出ています。
これはシートがおかしい、ということでしょうか?

お礼日時:2024/05/22 08:46

転記先シートの装置名の空白を無視するようにしました。


下記をURLにアップしました。
https://ideone.com/Z9JpEN

また、処理終了時に転記元ファイルの処理対象となった、ブック件数、シート件数、データ件数を表示するようにしました。
データ件数は、転記された1行を1件とカウントします。
(実質は投資用1件、計上用1件で2件となります)
    • good
    • 1

No20の回答の補足ですが、


転記先ではなく、転記されるはずの
転記元のデータを提示していただけませんでしょうか。

念のため確認ですが、
①小型機、転写機等の、転記先に存在する装置については、転記が行われている。
②転記元のフォルダには、転記元のブックが1件以上存在する。
③転記元のブックには、"D6110", "D6120", "D6125", "D6560"の何れかのシートが存在する。

上記の①~③は、全て成立していると理解して良いでしょうか。

問題なのは、装置名が転記先にない場合の、変換表による装置名変換が行われていないことのみと理解して良いですか。
もし、そうであれば、以下のマクロを登録し、実行してください。
(現行マクロと同じモジュールには格納しないでください。他のモジュールに格納してください)

Public Sub 変換試験()
Dim kanri As String
Dim ptn As String
kanri = "BP0050XYZ" '①
ptn = "BP0050*" '②
If kanri Like ptn Then
MsgBox ("変換対象です")
Else
MsgBox ("変換対象外です")
End If
End Sub

①の箇所に試験したい転記元データの管理番号を設定し
②の箇所にパターンに登録する文字列を設定してください。
「変換対象です」が表示されれば、変換対象になります。
①と②をいろいろ変えて確認してみてください。
    • good
    • 1

追伸:


そもそもの話になりますが、転記されないデータは、下記のいずれかのシートに属していますか。
"D6110", "D6120", "D6125", "D6560"
上記以外のシートのデータは処理されません。
    • good
    • 1

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

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


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