Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10929 / 13646 ツリー ←次へ | 前へ→

【19055】数字列の一括変換 山プ〜 04/10/20(水) 11:35 質問[未読]
【19058】Re:数字列の一括変換 ichinose 04/10/20(水) 13:10 回答[未読]
【19062】Re:数字列の一括変換 山プ〜 04/10/20(水) 13:45 お礼[未読]
【19125】こういう方法もあると思いますよ ぬぅ 04/10/22(金) 15:31 発言[未読]
【19127】Re:こういう方法もあると思いますよ 山プ〜 04/10/22(金) 16:11 お礼[未読]

【19055】数字列の一括変換
質問  山プ〜  - 04/10/20(水) 11:35 -

引用なし
パスワード
   Excel2000を使用しています。
8桁の数字が入っている列を日付のように変更する処理を作成しています。

  max_gyo = Workbooks(base_book).Sheets(st).Range("F65536").End(xlUp).Row
   
  With Range("F5:F" & max_gyo) '日付編集 yyyymmdd -> yyyy/mm/dd
    .Offset(, 0).Value = Application.Text(.Value, "0000""/""00""/""00")
  End With

上記の処理で8桁の数字項目が日付に変換されるのですが、件数が多いと
「.Offset(, 0).Value = Application.Text(.Value, "0000""/""00""/""00")」
の行で「型が一致しません」とエラーになってしまいます。5400件ぐらいまでは
変換可能なのですが、制限があるのでしょうか?

制限があるとして、解消法はあるのでしょうか?

とりあえず、1レコードづつ、間に「/」を入れる処理を全件に行うようにFor文を
使用して対応しようと思ってますが、簡潔な対応法がありましたら、教えていただきたいと思います。

よろしくお願いします。

【19058】Re:数字列の一括変換
回答  ichinose  - 04/10/20(水) 13:10 -

引用なし
パスワード
   ▼山プ〜 さん:
こんにちは。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=18896;id=excel
原因は、このトピックと同じだと思いますが・・・・。

>Excel2000を使用しています。
>8桁の数字が入っている列を日付のように変更する処理を作成しています。
>
>  max_gyo = Workbooks(base_book).Sheets(st).Range("F65536").End(xlUp).Row
>   
>  With Range("F5:F" & max_gyo) '日付編集 yyyymmdd -> yyyy/mm/dd
   .Value = _
     Application.Evaluate("=if(" & .Address & _
                "<>"""",Text(" & .Address & _
                ", ""0000""""/""""00""""/""""00""),"""")")
>  End With

これで試してみて下さい。
F5:Fnのセルの書式は標準で確認しました。

【19062】Re:数字列の一括変換
お礼  山プ〜  - 04/10/20(水) 13:45 -

引用なし
パスワード
   こんにちは。
▼ichinose さん:
>▼山プ〜 さん:
>こんにちは。
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=18896;id=excel
>原因は、このトピックと同じだと思いますが・・・・。

ここを見るとやはり数の制限があるようですね。

>
>>Excel2000を使用しています。
>>8桁の数字が入っている列を日付のように変更する処理を作成しています。
>>
>>  max_gyo = Workbooks(base_book).Sheets(st).Range("F65536").End(xlUp).Row
>>   
>>  With Range("F5:F" & max_gyo) '日付編集 yyyymmdd -> yyyy/mm/dd
>   .Value = _
>     Application.Evaluate("=if(" & .Address & _
>                "<>"""",Text(" & .Address & _
>                ", ""0000""""/""""00""""/""""00""),"""")")
>>  End With
>
>これで試してみて下さい。
>F5:Fnのセルの書式は標準で確認しました。

上記の記述で実行したところ、問題なく処理できました。
ありがとうございました。

【19125】こういう方法もあると思いますよ
発言  ぬぅ  - 04/10/22(金) 15:31 -

引用なし
パスワード
   山プ〜 さん、こんにちは!
既に解決済みかとは思いますが、ワークシートの既存機能を使う方法もあります。

1.8桁の数字が入力されているセル範囲または列を選ぶ
2.データ→区切り位置
 (区切り位置指定ウィザードが表示されます)
3.ウィザード1/3で、カンマやタブなどの区切り文字によって・・・を選び、次へ
4.ウィザード2/3はそのままの状態で、次へ
5.ウィザード3/3で、列のデータ形式で日付を選び、完了

以上を記録して改造するという手もあると思います。

【19127】Re:こういう方法もあると思いますよ
お礼  山プ〜  - 04/10/22(金) 16:11 -

引用なし
パスワード
   ▼ぬぅ さん:
>山プ〜 さん、こんにちは!
>既に解決済みかとは思いますが、ワークシートの既存機能を使う方法もあります。
>
>1.8桁の数字が入力されているセル範囲または列を選ぶ
>2.データ→区切り位置
> (区切り位置指定ウィザードが表示されます)
>3.ウィザード1/3で、カンマやタブなどの区切り文字によって・・・を選び、次へ
>4.ウィザード2/3はそのままの状態で、次へ
>5.ウィザード3/3で、列のデータ形式で日付を選び、完了
>
>以上を記録して改造するという手もあると思います。

ぬぅさん、ありがとうございます。
確かにこの方法でも実現できますね。
しかし、今回は同様のシートで6桁の数字を「HH:MM:SS」に変換する処理も
実行する必要があったので、解決済みの方法を採用させていただきました。
機会がありましたら、この方法も使用してみたいと思います。

10929 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free