[VBA][EXCEL]お知恵をお貸しください。 CSVファイルのX列に、6文字の英数字が2行目から最終行まであります。

[VBA][EXCEL]お知恵をお貸しください。 CSVファイルのX列に、6文字の英数字が2行目から最終行まであります。 それを、(最初の)5文字+*としたく(ABCDEFならABCDE*に)、XX列を作業列にして r = csv.Cells(Rows.Count, 1).End(xlUp).Row csv.Range("XX2").Resize(r - 1, 1).Formula = "=Mid(X2, 1, 5)&""*""" csv.Range("X2:X" & r).Value = csv.Range("XX2:XX" & r).Value としたのですけど、別に不都合はないんですが「こうやった方がいいかも」ってのがあったら教えてくださいなー。

Visual Basic | Excel63閲覧

ベストアンサー

1

ID非公開

2019/11/12 18:19

大したことではないですが、そこは Mid(X2, 1, 5) ではなくて LEFT(X2, 5) のほうが良くないだろうかとは思います。 あとは、あまりお手本になるような書き方じゃないですが、 With csv.Range("X2").Resize(csv.Cells(Rows.Count, 1).End(xlUp).Row - 1) .TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(5, 9)) .Value = Evaluate(.Address & "&""*""") End With とする手もあります。 スマートではないですが、XX列を使わずに済みます。

1人がナイス!しています

ThanksImg質問者からのお礼コメント

作業列無しでやれるのは想定してませんでしたので、勉強になります。 ありがとうございました。

お礼日時:2019/11/12 19:12

その他の回答(1件)

0

このような事は、けっこう個人の嗜好がありますね。 同じ事を何回も書くというのは嫌いな性分ですので、↓のような感じが好み。 メンテナンスしやすいと思います。 With csv With .Range("XX2:XX" & .Cells(Rows.Count, 1).End(xlUp).Row) .Formula = "=Mid(X2, 1, 5)&""*""" .Value = .Value End With End With

それだとXX列が値に戻りますよね。 XX列の値をX列に戻したいんですよね(いや、出来ますけども)。 質問の本題的には、6文字目をアスタリスクに変えるのって、Formulaを使って全行まとめて、というのがやっぱベストなんでしょうか?