Sub Sample() Dim i As Long, kouzou As String, tmp As Variant For i = 2 To 51 kouzou = Cells(i, 4).Value tmp = Split(kouzou, "/") If tmp(0) = "RC" Then Cells(i, "F").Value = "鉄筋コンクリート" Else Cells(i, "F").Value = "鉄骨鉄筋コンクリート" End If Cells(i, "G").Value = tmp(1) Cells(i, "H").Value = tmp(2) Cells(i, "I").Value = Cells(i, "F").Value & tmp(2) & "建ての" & tmp(1) & "階部分" Next i End Sub
僕なら、以下のコード、 tmp は文字列型の動的配列で宣言します。 tmp() as string です。
あと、next の手前は、以下のように書くかな。
tmp(0) & tmp(2) & "建ての" & tmp(1) & "階部分"
というのは、変数から値を拾ってくるほうが、オブジェクトへの参照をして所定のプロパティの値を取得するより高速なので。 内部形式文字列型のvariantを取得して & でつなぐ、というのも高負荷かと。 そういう意味でも、 tmp() as string で書いたほうが高速そうな予感です。体感できるほどの差にはならないでしょうが。
>小川先生 >今回は区切り文字が「/」しかなかったため、以下のように作ってみました。
Sub Sample()
Dim i As Long, kouzou As String, tmp As Variant
For i = 2 To 51
kouzou = Cells(i, 4).Value
tmp = Split(kouzou, "/")
If tmp(0) = "RC" Then
Cells(i, "F").Value = "鉄筋コンクリート"
Else
Cells(i, "F").Value = "鉄骨鉄筋コンクリート"
End If
Cells(i, "G").Value = tmp(1)
Cells(i, "H").Value = tmp(2)
Cells(i, "I").Value = Cells(i, "F").Value & tmp(2) & "建ての" & tmp(1) & "階部分"
Next i
End Sub
Sub Sample() Dim i As Long, kouzou As String, tmp() As String For i = 2 To 51 kouzou = Cells(i, 4).Value tmp = Split(kouzou, "/") If tmp(0) = "RC" Then tmp(0) = "鉄筋コンクリート" Else tmp(0) = "鉄骨鉄筋コンクリート" End If Cells(i, "F").Resize(1, UBound(tmp) + 1) = tmp Cells(i, "G").Value = Cells(i, "G").Value Cells(i, "I").Value = tmp(0) & tmp(2) & "建ての" & tmp(1) & "階部分" Next i End Sub
Sub Sample()
> Dim i As Long, kouzou As String, tmp As Variant
> For i = 2 To 51
> kouzou = Cells(i, 4).Value
> tmp = Split(kouzou, "/")
> If tmp(0) = "RC" Then
> Cells(i, "F").Value = "鉄筋コンクリート"
> Else
> Cells(i, "F").Value = "鉄骨鉄筋コンクリート"
> End If
> Cells(i, "G").Value = tmp(1)
> Cells(i, "H").Value = tmp(2)
> Cells(i, "I").Value = Cells(i, "F").Value & tmp(2) & "建ての" & tmp(1) & "階部分"
> Next i
>End Sub
Sub Sample()
Dim i As Long, kouzou As String, tmp() As String
For i = 2 To 51
kouzou = Cells(i, 4).Value
tmp = Split(kouzou, "/")
If tmp(0) = "RC" Then
tmp(0) = "鉄筋コンクリート"
Else
tmp(0) = "鉄骨鉄筋コンクリート"
End If
Cells(i, "F").Resize(1, UBound(tmp) + 1) = tmp
Cells(i, "G").Value = Cells(i, "G").Value
Cells(i, "I").Value = tmp(0) & tmp(2) & "建ての" & tmp(1) & "階部分"
Next i
End Sub
受講生さんの投稿
(投稿ID: 764)
今回は区切り文字が「/」しかなかったため、以下のように作ってみました。
Sub Sample()
Dim i As Long, kouzou As String, tmp As Variant
For i = 2 To 51
kouzou = Cells(i, 4).Value
tmp = Split(kouzou, "/")
If tmp(0) = "RC" Then
Cells(i, "F").Value = "鉄筋コンクリート"
Else
Cells(i, "F").Value = "鉄骨鉄筋コンクリート"
End If
Cells(i, "G").Value = tmp(1)
Cells(i, "H").Value = tmp(2)
Cells(i, "I").Value = Cells(i, "F").Value & tmp(2) & "建ての" & tmp(1) & "階部分"
Next i
End Sub
ゲストさんのコメント
(コメントID: 1652)
配列は、ウチの講座では、発展編2で扱います。(なので、以下の議論は、基礎編レベルの方は安心してスルーしてください (^^; )
区切り文字が前と後で異なる場合は、replace関数を使って変換してから split 関数、とかも考えられそうですね。
「先に登場したスラッシュと後に登場したハイフン」のような法則だと「john-due/tokyo-japan」のようなデータで問題が起きそうでもありますが。
僕なら、以下のコード、 tmp は文字列型の動的配列で宣言します。 tmp() as string です。
あと、next の手前は、以下のように書くかな。
というのは、変数から値を拾ってくるほうが、オブジェクトへの参照をして所定のプロパティの値を取得するより高速なので。
内部形式文字列型のvariantを取得して & でつなぐ、というのも高負荷かと。
そういう意味でも、 tmp() as string で書いたほうが高速そうな予感です。体感できるほどの差にはならないでしょうが。
>小川先生
>今回は区切り文字が「/」しかなかったため、以下のように作ってみました。
受講生さんのコメント
(コメントID: 1657)
小川先生のアドバイスを参考に、コードを修正してみました。
修正する際に、動画の後半部分の解説が非常に参考になりました。
Sub Sample()
Dim i As Long, kouzou As String, tmp() As String
For i = 2 To 51
kouzou = Cells(i, 4).Value
tmp = Split(kouzou, "/")
If tmp(0) = "RC" Then
tmp(0) = "鉄筋コンクリート"
Else
tmp(0) = "鉄骨鉄筋コンクリート"
End If
Cells(i, "F").Resize(1, UBound(tmp) + 1) = tmp
Cells(i, "G").Value = Cells(i, "G").Value
Cells(i, "I").Value = tmp(0) & tmp(2) & "建ての" & tmp(1) & "階部分"
Next i
End Sub
>匿名 さん:
>
>配列は、ウチの講座では、発展編2で扱います。(なので、以下の議論は、基礎編レベルの方は安心してスルーしてください (^^; )
>
>区切り文字が前と後で異なる場合は、replace関数を使って変換してから split 関数、とかも考えられそうですね。
>「先に登場したスラッシュと後に登場したハイフン」のような法則だと「john-due/tokyo-japan」のようなデータで問題が起きそうでもありますが。
>
>僕なら、以下のコード、 tmp は文字列型の動的配列で宣言します。 tmp() as string です。
>
>あと、next の手前は、以下のように書くかな。
>
>
>
>というのは、変数から値を拾ってくるほうが、オブジェクトへの参照をして所定のプロパティの値を取得するより高速なので。
>内部形式文字列型のvariantを取得して & でつなぐ、というのも高負荷かと。
>そういう意味でも、 tmp() as string で書いたほうが高速そうな予感です。体感できるほどの差にはならないでしょうが。
>
>>小川先生
>>今回は区切り文字が「/」しかなかったため、以下のように作ってみました。
>
>
>
ゲストさんのコメント
(コメントID: 1661)
はい。以下でよいかと (^^
↑華麗ですね (^^
>小川先生:
>
>小川先生のアドバイスを参考に、コードを修正してみました。
>修正する際に、動画の後半部分の解説が非常に参考になりました。
>