Aの列に
「1-1.jpg」
「1-3.jpg」
「1-4.jpg」
「2-1.jpg」
「2-2.jpg」
~~
という感じでデータが保存されています。
これを"-1""-3"の部分で列を分けたいと思っています。
1-1.jpg 1-3.jpg 1-4.jpg 1-5.jpg
2-1.jpg 2-3.jpg
3-1.jpg 3-3.jpg 3-4.jpg
という感じです。
・頭の数字は1から700番程度まであり、頭が同じものは同じ行にまとめたいです。
・後ろの-1は-1、-3、-4、-5、-6があります。(Eの列まで利用ということです)
・上の例にも書いていますが、-3、-4、-5、-6は無い物もあります。
何か良い方法はないでしょうか?
No.5ベストアンサー
- 回答日時:
#04です。
一部不具合があったので以下に差し替えてくださいSub Macro1()
Dim ws As Worksheet
Dim res, res2 As Range
Dim idx As Long
Dim wkStr As String
Set ws = ActiveSheet
Worksheets.Add after:=ActiveSheet
With ActiveSheet
For idx = 1 To ws.Range("A65536").End(xlUp).Row
wkStr = Left(ws.Cells(idx, "A"), InStr(ws.Cells(idx, "A"), "-"))
If Len(wkStr) > 0 Then
Set res = .Range(.Range("A1"), .Range("A65536").End(xlUp)).Find(wkStr)
If res Is Nothing Then
.Range("A65536").End(xlUp).Offset(1, 0) = wkStr
End If
Set res = .Range(.Range("A1"), .Range("A65536").End(xlUp)).Find(wkStr)
Set res2 = res.EntireRow.Find(ws.Cells(idx, "A").Value)
If res2 Is Nothing Then
res.Offset(0, Application.CountA(res.EntireRow)).Value = _
ws.Cells(idx, "A").Value
End If
End If
Next idx
.Columns(1).Delete
End With
End Sub
No.4
- 回答日時:
関数も考えたのですが、かなり複雑になりそうだったのでマクロにしてみました。
新しいシートを追加して振り分けるようにしています。以下のマクロをALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択して実行します。
Sub Macro1()
Dim ws As Worksheet
Dim res, res2 As Range
Dim idx As Long
Dim wkStr As String
Set ws = ActiveSheet
Worksheets.Add after:=ActiveSheet
With ActiveSheet
For idx = 1 To ws.Range("A65536").End(xlUp).Row
wkStr = Left(ws.Cells(idx, "A"), InStr(ws.Cells(idx, "A"), "-"))
If Len(wkStr) > 0 Then
Set res = .Range(.Range("A1"), .Range("A65536").End(xlUp)).Find(wkStr)
If res Is Nothing Then
.Range("A65536").End(xlUp).Offset(1, 0) = wkStr
End If
End If
Next idx
For idx = 1 To ws.Range("A65536").End(xlUp).Row
wkStr = Left(ws.Cells(idx, "A"), InStr(ws.Cells(idx, "A"), "-"))
Set res = .Range(.Range("A1"), .Range("A65536").End(xlUp)).Find(wkStr)
Set res2 = res.EntireColumn.Find(ws.Cells(idx, "A").Value)
If res2 Is Nothing Then
res.Offset(0, Application.CountA(res.EntireRow)).Value = _
ws.Cells(idx, "A").Value
End If
Next idx
.Columns(1).Delete
End With
End Sub
No.3
- 回答日時:
VBAで如何でしょうか。
C列に展開Const MaxCol As Integer = 20
Type Rec
wWORK(MaxCol) As String
End Type
Dim tWORK() As Rec
Dim tWorkCnt As Integer
Sub 振り分け()
Dim wMaxRow As Long
Dim wVal As Variant
Dim wIx As Integer
Dim wIy As Integer
Dim wIz As Integer
Dim wStr As String
Dim wFlg As Boolean
Dim wLen As Integer
'
wMaxRow = ActiveSheet.Range("A1").End(xlDown).Row
wVal = ActiveSheet.Range("A1:A" & wMaxRow)
tWorkCnt = 0
For wIx = 1 To UBound(wVal)
wStr = wVal(wIx, 1)
wFlg = False
wLen = InStr(1, wStr, "-")
For wIy = 1 To tWorkCnt
If Left(wStr, wLen - 1) = Left(tWORK(wIy).wWORK(1), wLen - 1) Then
For wIz = 1 To MaxCol
If tWORK(wIy).wWORK(wIz) = "" Then
tWORK(wIy).wWORK(wIz) = wStr
wFlg = True
Exit For
End If
Next
Exit For
End If
Next
If wFlg = False Then
tWorkCnt = tWorkCnt + 1
ReDim Preserve tWORK(tWorkCnt)
tWORK(tWorkCnt).wWORK(1) = wStr
End If
Next
'
For wIx = 1 To tWorkCnt
For wIy = 1 To MaxCol
ActiveSheet.Cells(wIx, wIy + 2) = tWORK(wIx).wWORK(wIy)
Next
Next
End Sub
(1) Alt+F11 (ツール -> マクロ -> Visual Basic Editor)
(2) 挿入 -> 標準モジュール -> 上記のモジュールを貼り付けて実行(F5を押す)する
No.2
- 回答日時:
頭の数字に抜けはありますか?ある場合にその行は空白になりますけど...
B1=IF(COUNTIF($A:$A,ROW()&"-*")>COLUMN()-2,INDEX($A:$A,COLUMN()+MATCH(ROW()&"-1.jpg",$A:$A)-2,1)&"","")
F列までコピーしてから下方にコピーしてください。
これでB:F列に展開できますので結果をコピーして
別シートにでも値として貼り付けてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 毎日手作業で時間がかかって、泣きたいです、、、VBAのプロの方、助けてください。。。 3 2022/10/25 04:26
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Windows 10 JPG PNG サポートされていない形式 (JPGファイルで開ける、開けないがある場合) 4 2022/04/23 13:46
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- PHP 画像ファイルの名前をそのままURLにする 3 2022/10/16 11:18
- その他(パソコン・スマホ・電化製品) 拡張子の選択方法について 4 2022/09/22 22:04
- その他(ビジネス・キャリア) 3つに区切ってペラペラめくって変えたりするのを用語で何と言うのですか。 2 2022/03/31 18:40
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- バス・高速バス・夜行バス 関東近郊でボロい路線バスに乗れるところはありますか? 1 2022/08/21 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのブック分割マクロを...
-
文字の色も参照 VLOOKUP
-
VBAで繰り返しコピーしながら下...
-
Excel VBA ピボットテーブルに...
-
ExcelのVlookup関数の制限について
-
Excelで全てのシートに一気に列...
-
Excelでの並べ替えを全シートま...
-
EXCELでシート1で作ったデータ...
-
Excel 2段組み
-
Excelで条件別にシートを振り分...
-
別シートから月(MONTH)で抽出す...
-
VBAで検索して、行をコピー&追...
-
エクセル マクロ 標準モジュー...
-
エクセルの保護で、列の表示や...
-
エクセルVBA データを別シート...
-
エクセルで横並びの複数データ...
-
エクセルVBA 行追加時に自...
-
エクセルで別シートの数値が一...
-
予定表に日本の休日を一気に入...
-
【条件付き書式】countifsで複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
文字の色も参照 VLOOKUP
-
オートフィルタ使用時にCOUNTIF...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
エクセル関数に詳しい方、教え...
-
【条件付き書式】countifsで複...
-
Excel の複数シートの列幅を同...
-
エクセル マクロ 標準モジュー...
-
エクセルで横並びの複数データ...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
VLOOKアップ関数の結果の...
-
SUMPRODUCTにて別シートのデー...
-
エクセルで、チェックボックス...
-
Excel VBA ピボットテーブルに...
-
【エクセル】1列のデータを交...
-
エクセルVBAで、ある文字を含ん...
-
エクセルのブック分割マクロを...
-
excel 複数のシートの同じ場所...
おすすめ情報