質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

815閲覧

VBAで選択したセルに対して行う文字列変換を、選択した範囲セルに対して行うことはできますか?

King_of_Flies

総合スコア382

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/10/02 01:52

おはようございます。
Takkoです。

以下質問のコードです。

'"16/09/26(火)"形式の入力を"2016/09/26"形式に整える。 targetClumn:変換対象列 Sub EditFormat(pClumn As Integer) 'フォーマット変更時に使用する変数 Dim inStrVal As Integer Dim afterCellVal As String '変換対象列の6行目から最終行までを変換する。 For pRow = 6 To rowsCount If Len(Cells(pRow, pClumn).Value) > 0 Then Cells(pRow, pClumn).NumberFormatLocal = "yyyy/m/d;@" inStrVal = InStr(Cells(pRow, pClumn).Value, "(") If inStrVal > 0 Then afterCellVal = Left(Cells(pRow, pClumn).Value, inStrVal - 1) Cells(pRow, pClumn).Value = CDate("20" + afterCellVal) End If Else Exit For End If Next pRow End Sub

上記コードでは渡されたClumnの列のデータをrow=6からForでデータの最終行まで、
文字変換をするやり方なのですが、
Range("B6:F6").Select
Range(selection,selection.End(xldown))で変換対象のセルデータを一括で選択し、
内部の文字データを変更することは可能でしょうか。

文字列の変更はやはり一セルごとにValueを変えていくべきですか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

記載のコードでは、各セルに設定される値がそれぞれ異なる可能性があります。
そのため、そのまま全てのセルについて値を変換するということはできないかと思います。
VBAで処理を行う場合は記載されている方法でもおかしくはありません。

速度面で課題がある場合、一案としては求める状態となる数式を隣の列に出力し、Excelで計算後に、計算後の値を対象の列に貼り付けるといった方法が考えられます。
実際にやっていることは同じなのと、実際に速度面で優位となるかは未検証ですが、最近のExcelはマルチスレッド計算をサポートしているのでVBAでの処理よりも結果的に早いということもあるかもしれません。

投稿2017/10/02 04:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問