を縦に保存された文字列の要素を分割しましたこのように見えた:各列についてVBAコピーは、私は、このワークシートから各ID(行1)のために縦に保存された情報を保存するために探しています水平に別のシートに
、行1内のIDと、文字列として保存された技術があります。各パート(3つあります)は、それぞれB、C、Dの2番目のワークシートに保存されています。
以下のコードでは、エラーはありません。それは単に何もしません。コードで停止を使用する場合、問題は、私が見つけようとしているアイテムID(FindIDcol、FindIDrow)が単に "Nothing"であるように見えます。
私はVBAの新機能であり、複雑すぎるアプローチや無効なコードがある可能性があります。しかし、皆さんのお役に立てれば幸いです。
ありがとうございました!
ここに私のコード:
Dim wsInput As Worksheet
Set wsInput = ActiveWorkbook.Worksheets("Supplier Skills")
Dim wsOutput As Worksheet
Set wsOutput = ActiveWorkbook.Worksheets("Search Skills")
Dim IDcolumn As Range
Dim IDrow As Range
Dim lastcol As Integer
Dim lastRow As Integer
Dim NextRow As Integer
Dim FindIDcol As Range
Dim FindIDrow As Range
With wsInput
lastcol = .Cells(1, Columns.Count).End(xlToLeft).Column
LastColLetter = Split(Cells(1, lastcol).Address(True, False), "$")(0)
'For every column on Input-Sheet with Data
For Each IDcolumn In wsInput.Range("A1:" & LastColLetter & "1")
'Firstly, find each ID column
FindIDcol = wsInput.Range("A1:" & LastColLetter & "1").Find(What:=IDcolumn, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not FindIDcol Is Nothing Then
'Secondly, get the respective column Letter
IDcolLetter = Split(FindIDcol.Address, "$")(0)
'Thirdly, find all skills saved in rows beneath this column
lastRow = .Range(IDcolLetter & .Rows.Count).End(xlUp).row
For Each IDrow In wsInput.Range(IDcolLetter & "1:" & IDcolLetter & lastRow)
'Fourthly, get the respective row-number for each skill
FindIDrow = wsInput.Range(IDcolLetter & "2:" & IDcolLetter & lastRow).Find(What:=IDrow, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
IDrowNumber = Split(FindIDrow.Address, "$")(1)
'Fifthly, split the strings in 3 parts
Dim myElements() As String
myElements = Split(wsInput.Range(IDcolLetter & IDrowNumber).value, "\")
'Sixthly, for every skill of that supplier, copy the ID in A, CG in B, Category in C and Product in D
NextRow = wsOutput.Range("A" & Rows.Count).End(xlUp).row + 1
wsInput.Range(IDcolLetter & "1").Copy Destination:=wsOutput.Range("A" & NextRow) 'ID
wsOutput.Range("B" & NextRow) = myElements(0) 'Commodity Group
wsOutput.Range("C" & NextRow) = myElements(1) 'Category
wsOutput.Range("D" & NextRow) = myElements(2) 'Product
Next IDrow
End If
Next IDcolumn
End With
'Set FindIDcol = ... '。それはあなたにエラーメッセージを与えるはずです。つまり、 'FindIFcol'と' IDcol'は同じではないでしょう(重複IDがない限り)? – arcadeprecinct
IDcolumnには常にセルの値が表示されているため、IDです。それは私が一緒に働いていたことを意味した第1のIDについては「A300743」となる。だからこそ私はIDcolLetterとIDrowNumberを使ってAddressを分割し始めました。私はセットを試みます。すでにありがとう! – InternInNeed
スプリッティングの2つの変更とともに、あなたのヒントは機能しました! :)あなたが別々の答えとしてあなたのコメントを書くなら、私はあなたをupvoteすることができるでしょう。 – InternInNeed