シート9219のB列の書式設定が標準だが
90105050050080のように文字列として表示されている
状態において、以下の2つのマクロを作成しました。
(1)Valueプロパティ省略
Sub 転記()
Sheets("Sheet1").Select
行 = 2
Do
If Cells(行, 6).Value = "" Then Exit Do
If Cells(行, 6).Value >= 10 Then
Cells(行, 7).Value = Sheets("9219").Range("B44")
Else
Cells(行, 7).Value = Sheets("9219").Range("B45")
End If
行 = 行 + 1
Loop
End Sub
(2)Valueプロパティ省略しない
Sub 転記02()
Sheets("Sheet1").Select
行 = 2
Do
If Cells(行, 6).Value = "" Then Exit Do
If Cells(行, 6).Value >= 10 Then
Cells(行, 7).Value = Sheets("9219").Range("B44").Value
Else
Cells(行, 7).Value = Sheets("9219").Range("B45").Value
End If
行 = 行 + 1
Loop
End Sub
(ア)転記先のSheet1のG列の書式設定が標準のままの場合
(1)→90105050050080 セルの値と同じ書式でコピーしてくるから
(2)→9.01E+13 セルに手入力したと同じ状態だから
(イ)転記先のSheet1のG列の書式設定を
標準→文字列に変更してからマクロ実行の場合
(1)→90105050050080 セルの値と同じ書式でコピーかつ書式が文字列なので(※1)
(2)→90105050050080 セルに手入力したと同じ状態だが書式が文字列なので
となりました。すっきりしました。
ただ ※1「(イ)の(1)」はマクロ終了後にセルの書式設定が
文字列から→標準に変更されるのかと思いましたが
(セルの値と同じ書式でコピ-されるから)文字列のままでした。(謎)
もう片方ですが
(3)5行目のValueを省いた
Sub 検索02()
Sheets("Sheet1").Select
Line = 2
Do Until Cells(Line, 1).Value = ""
On Error Resume Next
Cells(Line, 2).Value = Application.WorksheetFunction.VLookup(Cells(Line, 1), Worksheets("9219").Range("A1:B1000"), 2, 0)
On Error GoTo 0
If Cells(Line, 2).Value = "" Then
Cells(Line, 2).Value = Cells(Line, 1)
End If
Line = Line + 1
Loop
End Sub
(4)
Sub 検索()
Sheets("Sheet1").Select
Line = 2
Do Until Cells(Line, 1).Value = ""
On Error Resume Next
Cells(Line, 2).Value = Application.WorksheetFunction.VLookup(Cells(Line, 1).Value, Worksheets("9219").Range("A1:B1000"), 2, 0)
On Error GoTo 0
If Cells(Line, 2).Value = "" Then
Cells(Line, 2).Value = Cells(Line, 1)
End If
Line = Line + 1
Loop
End Sub
(ウ)転記先のSheet1のB列の書式設定が標準のままの場合
(3)→9.01E+13 90105050050080の予定でしたが?
(4)→9.01E+13 セルに手入力したと同じ状態だから
(エ)転記先のSheet1のB列の書式設定を
標準→文字列に変更してからマクロ実行の場合
(3)→90105050050080 セルの値と同じ書式でコピーかつ書式が文字列なので
(4)→90105050050080 セルに手入力したと同じ状態だが書式が文字列なので
こっちが分かりません。どこか記述がおかしいのでしょうか?
お礼
・会社のシステムはインポートするときに、 テキスト形式でエクセルにインポートする設定でエクセルファイルが できあがる ・よって書式が標準なのにもかかわらず文字列で存在できる ・そのファイルはデータがある部分はそうであるが データの無い部分は通常のエクセルの仕様で 書式が標準なら手入力するとその仕様の標準の結果になる ・マクロの書き方でセルの値をコピーする記述なら 元の値があるセルにある値をそのまま転記するので 転記先のセルの書式が標準であっても文字列のまま転記可能 ・マクロの書き方が新たに入力する書き方だと 手入力と同じなのでセルの書式どうりの結果になってしまう マクロの書き方 RangeオブジェクトのValueプロパティの事 すっきりしました。大変助かりました。 どうもありがとうございました。
補足
シート9219のB列の書式設定が標準だが 90105050050080のように文字列として表示されている 状態において、以下の2つのマクロを作成しました。 (1)Valueプロパティ省略 Sub 転記() Sheets("Sheet1").Select 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Sheets("9219").Range("B44") Else Cells(行, 7).Value = Sheets("9219").Range("B45") End If 行 = 行 + 1 Loop End Sub (2)Valueプロパティ省略しない Sub 転記02() Sheets("Sheet1").Select 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Sheets("9219").Range("B44").Value Else Cells(行, 7).Value = Sheets("9219").Range("B45").Value End If 行 = 行 + 1 Loop End Sub (ア)転記先のSheet1のG列の書式設定が標準のままの場合 (1)→90105050050080 セルの値と同じ書式でコピーしてくるから (2)→9.01E+13 セルに手入力したと同じ状態だから (イ)転記先のSheet1のG列の書式設定を 標準→文字列に変更してからマクロ実行の場合 (1)→90105050050080 セルの値と同じ書式でコピーかつ書式が文字列なので(※1) (2)→90105050050080 セルに手入力したと同じ状態だが書式が文字列なので となりました。すっきりしました。 ただ ※1「(イ)の(1)」はマクロ終了後にセルの書式設定が 文字列から→標準に変更されるのかと思いましたが (セルの値と同じ書式でコピ-されるから)文字列のままでした。(謎) もう片方ですが (3)5行目のValueを省いた Sub 検索02() Sheets("Sheet1").Select Line = 2 Do Until Cells(Line, 1).Value = "" On Error Resume Next Cells(Line, 2).Value = Application.WorksheetFunction.VLookup(Cells(Line, 1), Worksheets("9219").Range("A1:B1000"), 2, 0) On Error GoTo 0 If Cells(Line, 2).Value = "" Then Cells(Line, 2).Value = Cells(Line, 1) End If Line = Line + 1 Loop End Sub (4) Sub 検索() Sheets("Sheet1").Select Line = 2 Do Until Cells(Line, 1).Value = "" On Error Resume Next Cells(Line, 2).Value = Application.WorksheetFunction.VLookup(Cells(Line, 1).Value, Worksheets("9219").Range("A1:B1000"), 2, 0) On Error GoTo 0 If Cells(Line, 2).Value = "" Then Cells(Line, 2).Value = Cells(Line, 1) End If Line = Line + 1 Loop End Sub (ウ)転記先のSheet1のB列の書式設定が標準のままの場合 (3)→9.01E+13 90105050050080の予定でしたが? (4)→9.01E+13 セルに手入力したと同じ状態だから (エ)転記先のSheet1のB列の書式設定を 標準→文字列に変更してからマクロ実行の場合 (3)→90105050050080 セルの値と同じ書式でコピーかつ書式が文字列なので (4)→90105050050080 セルに手入力したと同じ状態だが書式が文字列なので こっちが分かりません。どこか記述がおかしいのでしょうか?