0

印刷できるように画面に表示するには、特定の番号(ユーザーが指定)の間の行を見つける必要があります。

from例:ユーザーは、値として104822000011および104822000020を入力しtoます。次に、別のワークシートでこれらの間にある数字を検索する必要があります。ワークシートのデータはデータベースから取得されます。指定された数値の間にある行のすべてのデータを返す必要があります。

私はVBAの知識がほとんどないので、これがワークシート関数で実行できるのであれば、それが望ましいでしょう。私はグーグルでいくつかのことを試しましたが、どれも簡単に実行できなかったか、機能しなかったようです。誰かがここで私を少し助けてくれますか?

4

2 に答える 2

2

ワークシートdataWSにデータがあり、列Aに行番号、列Bにデータがあると仮定します。

from別のワークシートで、値をA1toに入力しますB1

次に、でA2 =IF($A1<$B$1,$A1+1,"")、この行に表示する行番号を表示します。

次に、でB2データを取得します=IF($A2="","",VLOOKUP($A2,dataWS!A:B,2,FALSE))。数式をA2:B2下の行にコピーすると、設定が完了します。

VBAでそれを実行したい場合は、次のコードを使用できます(データ内のIDが正しく順序付けられていることを前提としています)。また、新しいデータを書き込む前にターゲット領域が空にならないことにも注意してください。

Public Sub getData()

Dim currentId As Long
Dim toId As Long

Dim wsTarget As Worksheet
Dim targetIdCol As Integer
Dim targetDataCol As Integer

Dim wsSource As Worksheet
Dim sourceIdCol As Integer
Dim sourceDataCol As Integer

Dim readRow As Long
Dim writeRow As Long


Set wsTarget = ThisWorkbook.Worksheets("Sheet2") ' name of the target worksheet
targetIdCol = 1    'number of the column where the ids are to be written (a=1)
targetDataCol = 2   'number of the column where the data is to be written

Set wsSource = ThisWorkbook.Worksheets("Sheet1") ' name of the source data worksheet
sourceIdCol = 1    'number of the column where the ids are to be read(a=1)
sourceDataCol = 2   'number of the column where the data is to be read


currentId = wsTarget.Range("A1").Value  'cell in which the from is specified (here "A1" of target worksheet)
toId = wsTarget.Range("B1").Value 'cell in which the to is specified (here "B1" of target worksheet)


readRow = 1   'row at which the data should start to be read
writeRow = 2   'row at which the data should start to be written


While (wsSource.Cells(readRow, sourceIdCol) <> "") And (currentId <= toId)

    If currentId = wsSource.Cells(readRow, sourceIdCol).Value Then
        wsTarget.Cells(readRow, targetIdCol) = wsSource.Cells(readRow, sourceIdCol).Value
        wsTarget.Cells(readRow, targetDataCol) = wsSource.Cells(readRow, sourceDataCol).Value
        readRow = readRow + 1
    Else

        If currentId > wsSource.Cells(readRow, sourceIdCol).Value Then
             readRow = readRow + 1
      Else
          currentId = currentId + 1
      End If
    End If

Wend



End Sub
于 2012-12-05T14:02:41.693 に答える
1

はい、行(不要な行)またはVBAをコピーすることでこれを行うことができます。そして、VBAは良い選択肢だと思います。

ただし、レコード番号が厳密に数値であり、表示するデータが少ない場合は、ピボットテーブルを使用する愚かな方法があります。

データシートを参照するピボットテーブルを追加できます。次に、すべてのフィールドを行ラベルにドラッグします。次に、すべてのフィールド設定について、レイアウトで[アイテムラベルを表形式で表示する]を選択し、すべての小計を削除します。これで、元のデータと同じように見えるはずです。

次に、レコード番号の任意の場所を選択し、行ラベルで[ラベルフィルター==>間]を選択できます。次に、fromとtoの値を入力します。

于 2012-12-10T05:28:13.203 に答える