teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

「この種のエラーを調べる方法について」を追加

2021/01/16 09:22

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -1,10 +1,28 @@
1
+ # 原因について
1
2
  おそらく、シート「情報_01」のA列(「管理番号(D+E)」の列)に入っている管理番号のデータが数値として入っているため、VBA 条でString 型として定義されている変数 「管理情報」とのマッチングでマッチしないのだと思われます。
2
3
  ISNUMBER()関数などで当該セルを確認してみてください、おそらくTRUE となると思います。
3
4
 
5
+ # 解決方法
4
6
  解決方法としては、以下のように、当該列のデータを文字列にすることが考えられます。
5
7
 
6
8
  0. 当該列の選択し、セル書式で表示形式を「文字列」にする。
7
9
  0. 当該列のデータをテキストエディタなどにコピーしたのち、再度貼り付ける。
8
10
 
9
11
  VBA プログラム上で、「管理番号」を数値(Integer)にする方法も考えられますが、あまりお勧めしません。
10
- 理由は、「管理番号」が数値というよりもIDとして扱われていると思われるため 「010100」といった、ゼロから始まる番号が出現する可能性も考えられ、その場合はうまく処理できなくなってしまうためです。
12
+ 理由は、「管理番号」が数値というよりもIDとして扱われていると思われるため 「010100」といった、ゼロから始まる番号が出現する可能性も考えられ、その場合はうまく処理できなくなってしまうためです。
13
+
14
+ # この種のエラーを調べる方法について
15
+ Excel の関数を VBA で使っていて思った通りに動かない場合は、
16
+ いったん VBA から離れて、元のExcel の関数で動作を確認してみるのが
17
+ 早道だと思います。
18
+
19
+ 今回の場合なら、同一ブックに適当なシートを追加するなりして、
20
+ 適当なセルに以下のような式を入れてみれば、
21
+ すくなくとも、VBAの問題か、Excel 関数の問題かの切り分けはすぐにできます。
22
+
23
+ ```Excel
24
+ =VLOOKUP(A1, 情報_01!A1:D3, 2, FALSE)
25
+ ```
26
+ ※A1 は任意のセルを指定
27
+
28
+ ここまで調べて、Excel 関数の問題だと判明した状態なら、Excel の問題として質問できるので、回答できる人も多くなり、より良い回答がより速く得られるでしょう。

2

記述ミスの修正

2021/01/16 09:21

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -7,4 +7,4 @@
7
7
  0. 当該列のデータをテキストエディタなどにコピーしたのち、再度貼り付ける。
8
8
 
9
9
  VBA プログラム上で、「管理番号」を数値(Integer)にする方法も考えられますが、あまりお勧めしません。
10
- 理由は、「管理番号」が数値というよりもIDとして扱われていると思わるため 「010100」といった、ゼロから始まる番号が出現する可能性も考えられ、その場合はうまく処理できなくなってしまうためです。
10
+ 理由は、「管理番号」が数値というよりもIDとして扱われていると思わるため 「010100」といった、ゼロから始まる番号が出現する可能性も考えられ、その場合はうまく処理できなくなってしまうためです。

1

解決方法を追加しました。

2021/01/16 05:41

投稿

kozuchi
kozuchi

スコア1193

answer CHANGED
@@ -1,2 +1,10 @@
1
1
  おそらく、シート「情報_01」のA列(「管理番号(D+E)」の列)に入っている管理番号のデータが数値として入っているため、VBA 条でString 型として定義されている変数 「管理情報」とのマッチングでマッチしないのだと思われます。
2
- ISNUMBER()関数などで当該セルを確認してみてください、おそらくTRUE となると思います。
2
+ ISNUMBER()関数などで当該セルを確認してみてください、おそらくTRUE となると思います。
3
+
4
+ 解決方法としては、以下のように、当該列のデータを文字列にすることが考えられます。
5
+
6
+ 0. 当該列の選択し、セル書式で表示形式を「文字列」にする。
7
+ 0. 当該列のデータをテキストエディタなどにコピーしたのち、再度貼り付ける。
8
+
9
+ VBA プログラム上で、「管理番号」を数値(Integer)にする方法も考えられますが、あまりお勧めしません。
10
+ 理由は、「管理番号」が数値というよりもIDとして扱われていると思わるため 「010100」といった、ゼロから始まる番号が出現する可能性も考えられ、その場合はうまく処理できなくなってしまうためです。