• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字変換マクロについて)

文字変換マクロの使い方と対応範囲について

このQ&Aのポイント
  • 文字変換マクロは、数値を文字列に変換するマクロです。
  • 行数や列数が増えても対応できるように作られています。
  • 具体的な使い方や対応する範囲について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

こんな感じでしょうか。 ループの回数指定にEnd(xlDown).Rowを使うのはその列の2行目以降にデータがない場合最大行数が返って怖いのでEnd(xlUp).Rowにしています。下にデータがある場合はRows.Countを下のデータの一行上に指定するか、もとのEnd(xlDown).Rowを利用してください。 同じように列方向もEnd(xlToLeft).Columnにしています。 Sub 文字() Dim i As Long, j As Long, k As Integer j = Cells(1, Columns.Count).End(xlToLeft).Column Debug.Print j For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row Cells(i, j + 2).Resize(1, j).Value = Cells(i, "A").Resize(1, j).Value For k = 1 To j With Cells(i, k + j + 1) .NumberFormatLocal = "@" .Value = StrConv(Cells(i, k + j + 1).Value, vbNarrow) .Value = Format(Cells(i, k + j + 1).Value, "'00") End With Next k Next i End Sub

blackcat77
質問者

お礼

回答ありがとうございました。助かりました。

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答no.2です。  他にも、繰り返し処理を使わずに、ワークシート関数を使って一気に値を算出させてから、得られた値のみを同じセル範囲に入力しなおすという方法もあります。 Sub QNo9233753_文字変換マクロについて_2() Const FirstCell = "A1" Dim myRange As Range, myOffset As Long With Range(FirstCell) myOffset = Range(.Offset(0), Cells(.row, Columns.Count).End(xlToLeft)).Columns.Count Set myRange = Range(.Offset(0), Cells(Rows.Count, .column).End(xlUp)).Resize(, myOffset).Offset(, myOffset + 1) End With myOffset = myOffset + 1 With Application .ScreenUpdating = False .Calculation = xlManual End With With myRange .FormulaR1C1 = "=IF(RC[-" & myOffset & "]="""","""",TEXT(RC[-" & myOffset & "],""00""))" .Parent.Calculate .NumberFormatLocal = "@" .Value = .Value End With With Application .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 For ~ To ~ NextではなくFor Each ~ in ~ Nextを使って繰り返し処理をされると良いです。 Sub QNo9233753_文字変換マクロについて() Const FirstCell = "A1" Dim c As Range, myRange As Range, myOffset As Long With Range(FirstCell) myOffset = Range(.Offset(0), Cells(.row, Columns.Count).End(xlToLeft)).Columns.Count Set myRange = Range(.Offset(0), Cells(Rows.Count, .column).End(xlUp)).Resize(, myOffset) End With myOffset = myOffset + 1 With Application .ScreenUpdating = False .Calculation = xlManual End With myRange.Offset(, myOffset).NumberFormatLocal = "@" For Each c In myRange c.Offset(, myOffset).Value = Format(c.Value, "00") Next c With Application .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With End Sub  因みに上記のVBAの中の With Application .ScreenUpdating = False .Calculation = xlManual End With という箇所と With Application .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With という箇所は処理を高速化するために設けているものですので、もし処理速度が若干遅くなっても良い場合には、次の様に簡略化してしまっても構いません。 Sub QNo9233753_文字変換マクロについて() Const FirstCell = "A1" Dim c As Range, myRange As Range, myOffset As Long With Range(FirstCell) myOffset = Range(.Offset(0), Cells(.row, Columns.Count).End(xlToLeft)).Columns.Count Set myRange = Range(.Offset(0), Cells(Rows.Count, .column).End(xlUp)).Resize(, myOffset) End With myOffset = myOffset + 1 myRange.Offset(, myOffset).NumberFormatLocal = "@" For Each c In myRange c.Offset(, myOffset).Value = Format(c.Value, "00") Next c End Sub

blackcat77
質問者

お礼

できました。解説ありがとうございました。