Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
セルに入力されているデータの利用
投稿日時: 21/04/06 13:38:44
投稿者: ffftp

こんにちは ffftpです。
  
masterというシートに以下に入力されています。
     A     B
1    ID    コード  
2     1    "電車代"
3     2    Month(DateAdd("m", -1, Cells(Target.Row, 2))) & "月分電話料金"
4     3    "駐車料金"
   
とあるキー値を基にこのデータベースを参照し、結果を導きたいと思っております。
  
Dim MasterRowMch As Variant
 MasterRowMch = Application.Match(Cells(Target.Row, 1), Sheets("master").Columns(1), 0)
2行目のID1番と4行目のID3番は抽出するのが文字列だけなので以下のコードでできました。
 =Sheets("master").cells(MasterRowMch,2)
   
しかし3行目のID2は文字列だけではないのでうまく抽出できません。
Cells(Target.Row, 2)に日付が入力されていて、
入力されている1ヵ月前の月の電話料金としたいですが、
完全な力不足で、手詰まり状態です。
 
お力をお貸しください。

回答
投稿日時: 21/04/06 14:33:48
投稿者: simple

Month(DateAdd("m", -1, Cells(Target.Row, 2))) & "月分電話料金"
が入力されています、というところから出発しても他人には謎です。
 
想像するに、
・その文字列をVBA中コードの一部とみて、
・それを評価(Eval)して
使おうということですか?
 
たしかに、プログラム言語のなかには、
文字列を対象に、それを評価(evaluate)する仕組みを持ったものがあります。
しかし、VBA(つまりは、VB6)にはそういう言語仕様を満たすものはありません。
そういうことは不可能です。
 
現在から見た前月を示す数値を入れた(例:3月分電話料金)としたいのであれば、
masterに、
=MONTH(EDATE(TODAY(),-1)) & "月分電話料金"
といった式を入れておけば済む話です。

投稿日時: 21/04/06 15:52:46
投稿者: ffftp

Simpleさん ありがとうございます。
 
他のソフトにインポートするCSVファイルを少ない工数で作成したいと思い
自分なりに考えた結果、これができると最短工数でできると判断しましたが、
ソフトの限界を考慮せず投稿し申し訳ございませんでした。
 

simple さんの引用:
Month(DateAdd("m", -1, Cells(Target.Row, 2))) & "月分電話料金"
が入力されています、というところから出発しても他人には謎です。
 
現在から見た前月を示す数値を入れた(例:3月分電話料金)としたいのであれば、
masterに、
=MONTH(EDATE(TODAY(),-1)) & "月分電話料金"
といった式を入れておけば済む話です。

 
現在から見た日付ではなく、レコード内に日付をもっているので
その日付の前月になるためどうすべきか迷っておりました。
 
Simpleさんのレスを見て、限界ややるべきことが明確になったので自分なりに頑張ってみます。
本当にありがとうございました。