🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

2565閲覧

Excel VBAでの検索

Masajp

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

3クリップ

投稿2019/12/11 01:13

2つのシートで数字同士の検索で不一致が出てしまいます。
A表の1873101とB表の1873101は同じに見えるのですが、Vlookupでも不一致となります。
データが文字なっていることで起こっていると思われますが、
比較基と比較先のデータ列のデータを一括文字変換させたいのですが、
文字へ変換してもEnterを押さないと反映できません。
一つ一つのセルに対してLoopさせるには処理時間が掛かってしまうため
一括変換の方法についてお教えいただきたく、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

比較基と比較先のデータ列のデータを一括文字変換させたいのですが、

ワークシート「A表」のA列の書式を文字列に変更するコード例

vba

1WorkSheets("A表").Range("A:A").NumberFormatLocal = "@"

修正案

上記のコードは書式は文字列に変更されますが、データ型は数値のままでした。

下記のリンク先で紹介されいる変換方法をVBAにしました。
Excel 文字列を数値に一括変換~Excelの達人技

vba

1WorkSheets("A表").Range("A:A").TextToColumns DataType:=xlDelimited, FieldInfo:=Array(1, 2)

これで書式もデータ型も文字列に変換されます。VLOOKUPのエラーも解消されるのを確認しました。

ちなみに、文字列を数値に変換する場合は、下記になります。

vba

1WorkSheets("A表").Range("A:A").NumberFormatLocal = "G/標準" 2WorkSheets("A表").Range("A:A").TextToColumns DataType:=xlDelimited, FieldInfo:=Array(1, 1)

投稿2019/12/11 04:48

編集2019/12/12 05:05
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iruyas

2019/12/12 00:52

書式だけ変えても、データの型までは変わりません。
hatena19

2019/12/12 03:39

確かにそうですね。確認しました。ご指摘ありがとうございます。 別案を追記しました。
guest

0

ベストアンサー

###回答

Excelの型変換は、【書式設定➡F2➡Enter】を実施しないと、内部的に変わらないみたいです。
http://excel-magic.com/post-1107/

そのため、【書式設定➡F2➡Enter】のマクロを作りました。

型変換したいデータがF列の1行目から複数行格納されている想定で作りました。
SendKeysでF2とEnterを送ってるだけなので、VBEditorから実行すると、VBEditorにキーが送信され失敗しますので、マクロ形式で実行してください。
数値書式も一応記載しておきました。
以下、プログラム、ご確認ください。

Sub macro() Dim MaxRow '//F列の最終行を取得 MaxRow = Range("F1").End(xlDown).Row '//処理対象のシートを選択 Worksheets("sheet1").Activate '//処理対象の列の先頭セルを選択 Worksheets("sheet1").Range("F1").Select '//F列先頭から下にデータの数だけ、書式設定 For i = 1 To MaxRow 'Worksheets("sheet1").Cells(i, 6).NumberFormatLocal = "0_ " '//数値書式 '//Cells(i,列番号)※F列なら6 Worksheets("sheet1").Cells(i, 6).NumberFormatLocal = "@" '//文字列書式 '//F2キー送信 SendKeys "{F2}" '//Enterキー送信 SendKeys "{ENTER}" Next MsgBox "FIN." End Sub

以上

投稿2019/12/11 05:39

編集2019/12/11 14:04
KazuSaka

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2019/12/12 10:34

ループしながらSendKeysで確かにデータ変換できますが、 > 一つ一つのセルに対してLoopさせるには処理時間が掛かってしまうため 一括変換の方法についてお教えいただきたく、 という質問の要件にはあいませんね。 私の回答で、表示形式も実際のデータ型も一括変換する方法を提示しましたので参考にしてください。
KazuSaka

2019/12/12 12:02

教えて頂き、ありがとうございます。 確認しました。
guest

0

VLOOKUPで指定する検索値の方を検索範囲の型に合わせれば、修正が少ないんじゃないでしょうか?
(例)
検索範囲のデータ:文字列
Vlookup検索値:数値
なら、検索値を文字列に変える
※検索範囲のデータに文字列と数値が混在してる場合はできないと思いますが…

投稿2019/12/11 03:00

KazuSaka

総合スコア640

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Masajp

2019/12/11 04:19

ご回答ありがとうございます。データは数字と文字が混在しているような状況ですので、VBAで全てを文字列に変更したく存じます。1セル毎の変更はできたのですが、処理に時間がかかるので、一括変換を模索しているところです。VBAでの一括変換につきましてご教示いただきたく、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問