アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎日保存されてCSVファイルがあります。

CSVファイルはAからAA列まであります。
取り込む場合にF列とY列のみ文字列にし「0」落ちを防いだ状態でエクセルに取り込みたいのですが
VBAのプログラムじゃどのようになりますでしょうか?(他の列はそのままで)

CSVファイル名は日付が付いたファイル都度更新されており、同一名ファイル名でないため
指定する形式がよいで。

色々試してみましたができませんでした。
お手数をおかけしますが
どなたかよろしくお願いします。

質問者からの補足コメント

  • どう思う?

    皆さまご回答ありがとうございます。
    説明がたりず申し訳ありません。
    大元CSVファイルを添付致します。

    ①大元のファイルは、システム上でダウンロードし、指定フォルダに保存されたCSVファイルとなっております。
    ②毎日ダウンロードするためファイル名(日付が入ったもの)は同一ではありません。
    ③マクロを実行した場合、実行は新規エクセルブックで開きたい

    よろしくお願いします(*- -)(*_ _)ペコリ

    「CSVファイルの「0落ち」にVBA」の補足画像1
      補足日時:2023/02/03 10:10
  • うーん・・・

    高度なご回答ありがとうございます。
    貼り付けて実行してみましたが、F列はエラーマークが付き2「0」落ち状です。
    文字列には表示形式は変わっています。

    大元のファイルをテキストファイルをどうなっているか確認するためテキストファイル開き確認したところ、F列Y列はカンマ区切りになっていました。
    但し、これをデータ→外部データの取り込み→テキストファイル→インポート
    →テキストファイルウィザード→(省略)カンマ→F列Y列を文字列に変更して読み込むと0落ちせず表示されるのですがこの作業が面倒で何か良いコードはないかと思った次第です。
    またちなみにY列→「O」列に変更した場合
    If i = 24 Then attr(i) = xlTextFormat 'Y列は文字形式
    If i = 15 Then attr(i) = xlTextFormat 'O列は文字形式
    でよろしいでしょうか?

    No.4の回答に寄せられた補足コメントです。 補足日時:2023/02/03 14:19
  • うーん・・・

    ご回答ありがとうございます。
    動きましたが、やはり0落ちしたままです。

    更に、元ファイルをメモ帳で開いて元データを確認したところ「カンマ」で区切られていました。
    Excelより手動で外部データ取り込み→テキスト→インポート・・・の作業が面倒でマクロでできないかと考えています。

    ちなみに、Y列→P列に変更した場合は

    ' F 列と P 列を文字列形式に変換
    ws.Range("F:F,P:P").NumberFormat = "@"

    でよろしいでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/02/03 14:38

A 回答 (6件)

下記URLにアップしました。

標準モジュールに登録してください。
https://ideone.com/L4fZyt

使用上の注意
1.マクロを登録したブックに空のシート("Sheet1")を作成しておいてください。そのシートを作業用として、以降使用します。
2.マクロ実行後、マクロのあるブックは自動的に閉じられます。
3.新規のブックのSheet1に読み込んだCSVファイルの内容が設定されます。
この回答への補足あり
    • good
    • 0
この回答へのお礼

再びすみません。
できました。何度もやり直ししてみました解決しました。
助かりましたありがとうございます。

お礼日時:2023/02/03 15:31

No4です。


追伸:
ちなみに漢字コードはシフトJISを想定していますが、それであってますか。
(UTF-8ではない)
    • good
    • 0

No4です。


問題点1
>またちなみにY列→「O」列に変更した場合
>If i = 15 Then attr(i) = xlTextFormat 'O列は文字形式
>でよろしいでしょうか?
If i = 14 Then attr(i) = xlTextFormat 'O列は文字形式
になります。0始まりなので、O列は14になります。

問題点2
>F列はエラーマークが付き2「0」落ち状です。
上記の意味がよくわかりません。
F列のCSVファイルの実際の値を提示していただけませんでしょうか。
上記の内容に一致するexcelのセルの状態の画像を提示していただけませんでしょうか。

問題点3
>大元のファイルをテキストファイルをどうなっているか確認するためテキストファイル開き確認したところ、F列Y列はカンマ区切りになっていました。

そもそもCSVファイルは、カンマ区切りのテキストファイルです。
F列Y列以外もカンマ区切りであれば、想定通りですが、他の列はカンマ区切りではないのでしょうか。

追伸:
こちらで、実行した時のF列の画像です。
左上の緑の三角マークのことをエラーマークと呼ばれてますか?
「CSVファイルの「0落ち」にVBA」の回答画像5
    • good
    • 0

不明点です。


1.読み込み先は、VBA(マクロ)を格納してあるブック内のシートで良いのでしょうか。
2.その場合のシート名は何でしょうか。(どのシートに読み込みますか)
3.データはダブルクートで囲まれていますか。それとも囲まれていませんか。下記の①②のどちらでしょうか。
"ABCD","123","XYZ"・・・・①
ABCD,123,XYZ・・・・②
    • good
    • 0
この回答へのお礼

メモ帳で開いてみました。②です。
オフィスはエクセル2016をしようしています。
なので、データ→外部データの取り込み→テキストファイル→インポート→カンマ区切りのをいちいち行うのが面倒でマクロにできないかと思いました。

お礼日時:2023/02/03 12:00

Sub ImportCSVwithFormatting()


Dim strFile As String
Dim strPath As String
Dim wb As Workbook
Dim ws As Worksheet

' CSV ファイル名を選択
strFile = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv), *.csv", Title:="Select CSV File")
If strFile = "False" Then Exit Sub

' CSV ファイルをエクセルに読み込む
strPath = Application.DefaultFilePath & "\"
Set wb = Workbooks.Open(strFile)
Set ws = wb.Sheets(1)

' F 列と Y 列を文字列形式に変換
ws.Range("F:F,Y:Y").NumberFormat = "@"

' 新規エクセルブックにシートを貼り付ける
ws.Copy
ThisWorkbook.Activate
ws.Paste

' 作業用ブックを閉じる
wb.Close False
End Sub


このコードは、CSV ファイルを選択して読み込んでから、F 列と Y 列の書式を文字列に変換します。次に、読み込んだシートを新しいエクセルブックに貼り付けます。このマクロを実行すると、所望の動作が行われます。
この回答への補足あり
    • good
    • 1

CSVファイルとして読み込むのなら、文字列は引用符で囲む必要があります。

引用符で囲まれていないものを文字列として扱いたいなら、一旦テキストファイルとして読み込んで、カンマで分割するくらいでしょうか。
aaa,"bbb,BBB",ccc
のように、引用符で囲まれたカンマを含んだ文字列がデータ中にあり得るのなら、非常に面倒ですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています