色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

VBA勉強中で、うまく表示形式の取得ができません。

エクセルに2つのシートがあり、互いのシートのI列(9)とJ列(10)が一致した行を
片方のシートに上書きするのですが、書式が合わせられません。
CSVシートの値のみ代入して、書式はjadシート書式のままにしたい、
と作ったコードが下記のものです。。

A,B,I列が文字列の数字で0が飛び、F,G,H列が日付yyyy/mm/ddが折り返して表示できません。
ご指導いただけますと幸いです。

Dim jad As Worksheet
Dim CSV As Worksheet
Dim MyList() As Variant
Dim OldList() As Variant
Dim LastRow As Long
Dim i As Long
Dim j As Long

Set jad = Sheets("jad")
Set CSV = Sheets("CSV")
CSV.Select
MyList = CSV.Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 22).Value
jad.Select
OldList = jad.Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 22).Value

For i = 1 To UBound(OldList)
For j = 1 To UBound(MyList)
If OldList(i, 9) = MyList(j, 9) And OldList(i, 10) = MyList(j, 10) Then

jad.Cells(i, 1).Resize(1, 22).Value = CSV.Cells(j, 1).Resize(1, 22).Value
End If
Next j
Next

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

  • 失礼しました。元のシート・後のシートを貼付けました。
    伝わりますでしょうか。

    「VBA 表示形式の取得」の補足画像1
    No.1の回答に寄せられた補足コメントです。 補足日時:2021/08/18 14:58
  • 状況説明が足りなすぎですね。すみません。
    .csvのファイルをQueryTablesで表示形式をそれぞれ指定して書き込んだのが
    csvシートです。

    最初からの手順は、
    ①別ブックからjadシートにコピーし
    ②.csvのファイルをcsvシートに書き込み
    ③条件一致行をjadシートに値コピー

    ③の部分だけを相談していたのです。
    .csvを直接jadシートに書き込むのがわからなくなり、工程を分けました。
    ③で再度、表示形式指定しないといけないのですね。

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/08/19 06:20
gooドクター

A 回答 (5件)

こんばんは。



.csvファイルから、一旦、Excelのcsvシートに書き込み、その書き込んだ
 データを③のjadシートに書き込んでいるのですね。
 その書き込んだcsvシートが、右上の貼り付けた<csvシート>ですよね。

う~ん、推測と違いましたね。
直接の解決方法ではありませんが、見た目が同じなら良いのでしょうか?
見た目だけでよければ、頭に ’ を付ければ、ほぼ確実に文字になると思います。
元の文字 : 000001 → 先頭に’を : '000001 → 見た目 : 000001

If OldList(i, 9) = MyList(j, 9) And OldList(i, 10) = MyList(j, 10) Then

jad.Cells(i, 2).Resize(1, 21).Value = CSV.Cells(j, 2).Resize(1, 21).Value
jad.Cells(i, 1).Value = ”'” & CSV.Cells(j, 1).Value

End If

ただ、A列のデータを元に、関数などを使われる場合は、具合が悪いかも。



原因の切り分け案として、下記で結果はどうでしょうか?

For i = 1 To UBound(OldList)
For j = 1 To UBound(MyList)
If OldList(i, 9) = MyList(j, 9) And OldList(i, 10) = MyList(j, 10) Then

jad.Cells(i, 1).Resize(1, 22).Value = CSV.Cells(j, 1).Resize(1, 22).Value
debug.print CSV.Cells(i, 1).Value  ’<*****追加

End If
Next j
Next

イミディエイトウィンドウで見た時に、000001 なのか、1 だけなのか、
 時間が掛かりますが、原因の場所を絞り込みする必要があるかも。
    • good
    • 0
この回答へのお礼

ありがとうございます!!

原因は
jadシートのセルの書式設定がバラバラでした。(同じ列でも標準だったり文字列だったり)
当初確認したjadシートのセルが文字列で、大丈夫と思い込みましたが、別の日のjadシートでは(貼り付けた画像)上の方の行が標準でした。

毎日前回シートに今回情報を書き込んでいるので、どこかで作業者が加工したのを引継ぎ続けているうちに、バラバラになったかと思います。

旧プログラムはaccsessでアポストロフィー状態の文字で出力されていて、見た目が同じなので気づけませんでした。
アポストロフィマジックに翻弄されていた自分がわかりました。

アドバイスありがとうございます。

助かりました!

お礼日時:2021/08/20 08:46

No.1の者です。



1つ気になったのですが、csvシートって、ファイルの拡張子:.csvの
 ファイルを開いたものなのでしょうか?
もし、そうでしたら、それが原因かも知れません。

csvファイル Excel 取り込み 変換される VBA などで検索
https://www.excelspeedup.com/csvmojiretsu/

違ったら、無視して下さい。
この回答への補足あり
    • good
    • 1

こんにちは。



画質が。。。

確認ですが、1つは下記であっていますか?

CSVシートのセルA7:000001 が、左下のExcelのセルA4:1 になっている。
これを、000001 のままにしたいという事でしょうか?
上記でしたら、転記前にA列を文字列にすれば解決すると思います。

F~Hが####は、セルの設定で、折り返し表示する でしたっけ?
 それにレ点チェックして、希望の表示になるでしょうか?
それでよければ、転記後に、折り返し表示するの設定にしては?と。

上記対応で良ければ、その設定をマクロで変更する事で解決できるかと。

参考になったでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

書き込み元の「CSVシート」も文字列で
値貼付け先「jadシート」も文字列なのに、
マクロで書き込まれたら文字列が数値や日付に変わってしまうのが、不思議でした。もう少し勉強してみます。

お礼日時:2021/08/18 17:47

こんにちは



>書式はjadシート書式のままにしたい、
そのようなコードになっていると思います。

>A,B,I列が文字列の数字で0が飛び、F,G,H列が
>日付yyyy/mm/ddが折り返して表示できません。
書式を設定すればよいだけと推測されますが、上記の「変えない」に反することになります。

もっとも、元が「標準」などになっているセルに日付型の値を代入すると、エクセルが自動的に日付と判断して、勝手に書式を日付型に変えちゃったりしますけれど・・・
ご質問の内容は、これとは違うと思われますし…
    • good
    • 0

こんにちは。



直接の回答ではないのですが、

Excelが(おせっかいにも)自動変換して、書式が変わっているという事でしょうか?
例えば、文字だったものが、数字に変換されて、0が消えたって事でしょうか?

マクロで最後に書式を設定しなおせば良いのでは?と。

実施の元の値、代入後の値(現状の結果)、希望の値(こうなって欲しい結果)
 を書かれると、分かりやすいのですが。。。
この回答への補足あり
    • good
    • 1

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

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

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング