質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

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

Q&A

解決済

1回答

3543閲覧

VBA #VALUE!エラーの解決方法

r_o_234

総合スコア15

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

VBA

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

0グッド

0クリップ

投稿2020/06/01 07:33

前提・実現したいこと

いつもお世話になっております。
VBAで転換マクロツールを作っています。

下記に示すようにのコードを書いており
18~22行目の文中の転換抽出先のセルの記述をA2,A3からC2,C3に変更したところ、
(転換抽出元のエクセルファイルのG2,H2のセルの記述を、転換抽出先のエクセルファイルのC2,C3に書き出すというVBAの記述です。)
C2,C3が#VALUE!と表示されるエラーになってしまいます。

抽出先がA2,A3の際は正常に動いていました。
エラーとなる原因・ヒント等、おわかりになれば教えて頂けないでしょうか。

イメージ説明

イメージ説明

イメージ説明

発生している問題・エラーメッセージ

#VALUE!

該当のソースコード

VBA

1Public Sub Converter() '変数定義 2 3 Dim ftype As Variant 4 Dim fpath As Variant 5 Dim str As Variant 6 Dim Target As Workbook 'コンバートモジュール 7 8 ftype = "Microsoft Excelブック,*.xls?" '選択できるファイルはエクセルファイルのみ 9 fpath = Application.GetOpenFilename(ftype, , "") 'ファイル参照ダイアログの表示,ftype=fpath 10 11 Debug.Print fpath 12 If fpath = False Then 13 Exit Sub 'Endで強制終了はよろしくない。ダイアログでキャンセルボタンが押された場合は処理を終了します。 14 End If 15 16 Set Target = Workbooks.Open(fpath) 17 18 Target.Sheets(1).Range("G2").Copy ThisWorkbook.Sheets(2).Range("C2") 19 Target.Sheets(1).Range("H2").Copy ThisWorkbook.Sheets(2).Range("C3") 20 21 ThisWorkbook.Sheets(2).Range("C2:C3").Value = ThisWorkbook.Sheets(2).Range("C2:C3").Value '数式→数値変換 22 ThisWorkbook.Sheets(2).Range("C2:C3").NumberFormatLocal = "yyyymmdd" 23 24 Target.Close '※開いたブックは閉じておく 25 Set Target = Nothing '念のため、変数開放 26 27Dim sh As Worksheet 'csv保存モジュール 28Set sh = Worksheets(2) 29sh.SaveAs Filename:="C:\Work\出力先\test.csv", FileFormat:=xlCSV 30str = FormatYYYYMMDD(2020, 3, 1) 31MsgBox (str) 'yyyymmdd出力用 32 33End Sub 34 35Public Function FormatYYYYMMDD(ByVal yyyy As Variant, ByVal mm As Variant, ByVal dd As Variant) As String 36 FormatYYYYMMDD = Format(yyyy * 10000 + mm * 100 + dd, "00000000") 37End Function 38

試したこと

転換抽出先が、A2,A3だった時はエラーを吐かずに,1900101,19000102というように文字列→数値に変換して数値が正常に表示されていました。
(日付表示のVBAを実装するために、A、B列に2020年、3月という風に表示して前回のものより変更しています。)

コードの記述をA2,A3に戻したところ正常に動作します。
C2,C3の時は何故#VALUE!になるのか原因がわかりません。

補足情報(FW/ツールのバージョンなど)

Windows10,Excle2016

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

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

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

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

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

guest

回答1

0

ベストアンサー

単純なページでは再現しませんでしたので、原因はわかりませんでした。
やりたいことは結局のところ値のコピーと思われるので、次のようなコードにしたらどうでしょうか。

VBA

1Set Target = Workbooks.Open(fpath) 2 3Target.Sheets(1).Range("G2").Copy 4ThisWorkbook.Sheets(2).Range("C2").PasteSpecial xlPasteValues 5Target.Sheets(1).Range("H2").Copy 6ThisWorkbook.Sheets(2).Range("C3").PasteSpecial xlPasteValues 7ThisWorkbook.Sheets(2).Range("C2:C3").NumberFormatLocal = "yyyymmdd" 8 9Target.Close '※開いたブックは閉じておく 10Set Target = Nothing '念のため、変数開放

投稿2020/06/01 08:01

ttyp03

総合スコア16998

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

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

r_o_234

2020/06/01 08:38

ttyp03さん ありがとうございます!助かりました。 毎度ありがとうございます。 ご教授頂いたコードに変更した所、正常に動作しました。 助かりました。エラーの原因は不明ですが、このコードで開発を進めさせて頂きます。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問