ある Excel ワークシートからデータを選択して別のワークシートにコピーする必要がありますが、データをコピーするプロセス中に次のことを達成する必要があります。
元のワークシートの行ごとに、列ごとにセルを選択します (これは、おそらく配列などを使用して事前に定義できます)。
データを操作して、新しいワークシートでの向きを変更します。以下のスクリーンショットを参照してください。
私が言いたいことを正確に説明するのは難しいので、私のスクリーンショットが私が必要としているものを伝えてくれることを願っています.
各行にはチャネル値があり、すべての結果をチャネルごとに並べ替えて要約する必要があります。制限に対して結果をチェックする必要もありますが、この問題が解決された後、それを超えることができます。
以下にコードを示します。これは私の最初のスクリプトであるため、エラーが発生する可能性があります。チャネルごとにデータを並べ替えてもかまいません。これまでのところ、必要な列を選択して新しいワークシートに正確にコピーするのに苦労しています。
コードの最初の部分は、新しいワークシートを確認して作成することです。その後、必要な列を事前定義できる変数と配列を定義します。x行数をチェックするループで終了し(ただし、行の数だけ繰り返したい)、その中に行ごとに別のループがあり、定義済みの列に基づいてセルを取得します。
デバッグ時に、ループ内の一番下にあるシート コピー関数のオブジェクトまたはアプリケーション エラーとして表示されます。どこが間違っているのかわかりません。これを攻撃するより良い方法はありますか?
Sub Process_Results()
'User defines the worksheets for this script
sourcedatasheet_name = InputBox("Enter the customer data sheet name: ", "Enter Worksheet Name")
For rep = 1 To (Worksheets.Count)
If LCase(Sheets(rep).Name) = LCase(sourcedatasheet_name) Then
Exit For
ElseIf (rep = Worksheets.Count) And (LCase(Sheets(rep).Name) <> LCase(sourcedatasheet_name)) Then
MsgBox "This sheet does not exist!"
Exit Sub
End If
Next
destinationdatasheet_name = InputBox("Enter the destination worksheet name to write the data to: ", "Enter Destination Worksheet Name")
For rep = 1 To (Worksheets.Count)
If LCase(Sheets(rep).Name) = LCase(destinationdatasheet_name) Then
MsgBox "This sheet already exists!"
Exit Sub
End If
Next
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(ActiveSheet.Name).Name = destinationdatasheet_name
'These are the variables for referencing data sets in the source sheet
Dim source_testmodel
Dim source_testcasename
Dim source_measurementname
Dim source_carrierfrequency
Dim source_limitlow
Dim source_limithigh
Dim source_measuredresult
Dim source_measurementunit
'These are the variables for referencing data set columns in the processed data sheet
Dim destination_testmodel
Dim destination_testcasename
Dim destination_measurementname
Dim destination_carrierfrequency_bottomchannel
Dim destination_carrierfrequency_middlechannel
Dim destination_carrierfrequency_topchannel
Dim destination_measuredresult
'Define the column number and cell column reference for each data set that will be used to retrieve information from the source sheet
source_testmodel = 9
source_testname = 11
source_measurementname = 12
source_measuredcarrierfrequency = 13
source_measurementlimitlow = 15
source_measurementlimithigh = 16
source_measuredresult = 17
source_measurementunit = 18
Dim array_source_fields(8) As Variant
array_source_fields(1) = source_testmodel
array_source_fields(2) = source_testname
array_source_fields(3) = source_measurementname
array_source_fields(4) = source_measuredcarrierfrequency
array_source_fields(5) = source_measurementlimitlow
array_source_fields(6) = source_measurementlimithigh
array_source_fields(7) = source_measuredresult
array_source_fields(8) = source_measurementunit
'Define the column number and cell column reference for each data set that will be used to write information to the processing sheet
destination_testmodel = 1
destination_testname = 2
destination_measurementname = 3
destination_channelbottom = 4
destination_channelmiddle = 5
destination_channeltop = 6
Dim array_processed_fields(6) As Variant
array_processed_fields(1) = destination_testmodel
array_processed_fields(2) = destination_testname
array_processed_fields(3) = destination_measurementname
array_processed_fields(4) = destination_channelbottom
array_processed_fields(5) = destination_channelmiddle
array_processed_fields(6) = destination_channeltop
'Start processing data
Dim y As Variant
Dim lastrow As Long
For x = 1 To 100 'row 'lastrow=activesheet.usedrange.specialcells(xlCellTypeLastCell)
For Each y In array_source_fields 'y = LBound(Application.Transpose(array_source_fields)) To UBound(Application.Transpose(array_source_fields))
Sheets(sourcedatasheet_name).Cells(x, y).Copy Destination:=Sheets(destinationdatasheet_name).Cells(x, y)
Next y
Next x
End Sub