プロが教える店舗&オフィスのセキュリティ対策術

Sub 分けてソートして貼り付ける()

Dim srcSheet As Worksheet
Dim destSheet As Worksheet
Dim lastRow As Long
Dim srcData As String
Dim dataArray() As String

' Sheet1を参照
Set srcSheet = ThisWorkbook.Sheets("Sheet1")
' Sheet2を参照
Set destSheet = ThisWorkbook.Sheets("Sheet2")

' Sheet1の最終行を取得
lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row

' Sheet1のA列をソート
srcSheet.Range("A1:A" & lastRow).Sort Key1:=srcSheet.Range("A1"), Order1:=xlAscending, Header:=xlNo

' A列のすべてのセルに対して処理を行う
For i = 1 To lastRow
' A列のデータを取得
srcData = srcSheet.Cells(i, 1).Value

' データを「_」を基準に分ける
dataArray = Split(srcData, "_")

' 分けたデータをSheet2のA2セル、B2セル、C2セルに貼り付ける
destSheet.Cells(i + 1, 1).Value = dataArray(0)
destSheet.Cells(i + 1, 2).Value = dataArray(1)
destSheet.Cells(i + 1, 3).Value = dataArray(2)

' 拡張子を削除
Dim lastDotIndex As Long
lastDotIndex = InStrRev(dataArray(2), ".")
If lastDotIndex > 0 Then
dataArray(2) = Left(dataArray(2), lastDotIndex - 1)
destSheet.Cells(i + 1, 3).Value = dataArray(2)
End If
Next i

End Sub

A 回答 (6件)

>dataArray = Split(srcData, "_")



セルデータが空白でもインデックス0の値は "" になるので(0)がエラーになる事はないかなと。
(1)以上はあり得ますけど。
    • good
    • 0

#2です。



空白セルの場合エラー箇所が違うと思いますよ。
綴りミスなどはありませんか?
「Sub 分けてソートして貼り付ける() 」の回答画像5
    • good
    • 0

#2です。

(これは関係なかったのかも)

空白セルでエラーになるのは多分 dataArray(2) この絡みであって、
>destSheet.Cells(i + 1, 1).Value = dataArray(0)
ここでは出ないと思いますよ。
Split した後で困るのはインデックス1以上の部分でしょうから。

検証:

Sub aaa()
Dim r As Range
Dim dataArray() As String

For Each r In Range("A1:A5")

dataArray = Split(r.Value, "_")

r.Range("C1:E1").Value = dataArray

Next

End Sub

エラー名称が出ているならその内容を記載された方が。
或いは綴りミスとかスペースが半角ではなく全角とか?
「Sub 分けてソートして貼り付ける() 」の回答画像4
    • good
    • 0

Sheet1ですが


A1~Aの最終行の間に空白のセルがありませんか。
空白のセルがあると、エラーが発生します。
添付図のA4のセルです。
最終行はA6とします。
「Sub 分けてソートして貼り付ける() 」の回答画像3
    • good
    • 1

Splitなら



Dim dataArray() As String

ではなく

Dim dataArray As Variant

ではないかな?
    • good
    • 0

質問は何でしょうか?

    • good
    • 0
この回答へのお礼

destSheet.Cells(i + 1, 1).Value = dataArray(0)この部分でデバッグが出るのですがなんで出るのでしょうか?

お礼日時:2023/08/04 22:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!