システムwiki

vbaヘルプ-データを抽出する方法?

Saransh 受付中 最終更新日:2020-08-19 22:01

nシート1-次のデータがあります:

アレックス20

デレク30

リサ25

神戸60

シート2には次の3つの列があります:

10~30、30~50、50~70

シート1からデータを抽出し、それらが属するカテゴリの下のシート2に配置したい

シート2では、10~30歳未満にはアレックスとリサ、30~50歳未満にはデレクを、50~70歳未満には神戸をリストに入れます.シート1からデータを抽出し、それが属するカテゴリの下のシート2に配置する方法を教えてください.

このコードで私が間違っていることについて誰かが何か知っていますか?

Sub movedata()

Dim i As Long

LastRowを長い間暗くする

LastRow=Range( "B"&Rows.Count).End(xlUp).Row

For i=1 To LastRow

If Worksheets( "Sheet1").Cells(i、i).Value>= 10 And Worksheets( "Sheet1").Cells(i、i).Value<= 30 Then

Worksheets( "Sheet2").Range( "A2")= Worksheets( "Sheet1").Cells(i、i).Offset(-1、0)

ElseIf Worksheets( "Sheet1").Cells(i、i).Value>= 30 And Worksheets( "Sheet1").Cells(i、i).Value<= 50 Then

Worksheets( "Sheet2").Range( "B2")= Worksheets( "Sheet1").Cells(i、i).Offset(-1、0)

その他

Worksheets( "Sheet2").Range( "C2")= Worksheets( "Sheet1").Cells(i、i).Offset(-1、0)

Worksheets( "Sheet2").Range( "C2")= Worksheets( "Sheet1").Cells(i、i).Offset(-1、0)

終了の場合

次のi

End Sub

[移動元:マイクロソフトエデュケーション/オフィス/Excel]

返信リスト(回答:6)

1 #
Andreas

そのようなシナリオを再現するのはあまりにも複雑すぎる.そしてそれがあなたのものと一致しないならば、私たちの解決策はあなたのために働かないでしょう.
このような要求の場合は、オリジナルのファイルのレイアウトを持つサンプルファイルを作成して、サンプルデータで埋められたサンプルセルと予想される結果を持つ色のセルを作成してください.
最良のファイルのコピーを作成し、必要なデータを匿名化します.このためにこのファイルをダウンロードしてください リンク:MODAnonyzize.
Excelファイルを開く
シートタブを右クリック
「コードの表示」を選択してください Ctrl-Mを押す
ダウンロードしたファイルを選択してインポートします VBAエディタを閉じる
機密データを持つセルを選択します ALT-F8を押す
マクロを選択してください [実行]をクリックします OneDrive(または選択した他のオンラインファイルの声)にアップロードして、ダウンロードリンクをここに投稿します.
リンク:シェアー ONEDRIVE-ファイムアンドフォルダ-9FCC2F7D-DE0C-4CEC-93B0-A82024800C07
それから私達はファイルを見ることができ、解決策を見つけることを試みることができます.ご理解いただきありがとうございます.
アンドレアス.

2 #
Herbert

PowerPivotおよびPower Query(別名Get&Transform)を備えたExcel 365 Pro Plus

年齢で分類された名前.

数式なし、VBAマクロなし.

https://www.mediafire.com/file/1w6pn9yir6t0wk8/03_19_20a.xlsx/file

https://www.mediafire.com/file/v1ox8fjlfvuyqrj/03_19_20a.pdf/file

3 #
AshishM

HI、

あなたが非VBAソリューションに興味がある場合は、Sheet2のセルB3でこのアレイ式(Ctrl + Shift + Enter)を試して、下/右をコピーしてください.これが役立つことを願っています.

= IFERROR(索引(Sheet1!$ A $ 2:$ A $ 5、小さい(Sheet1!$ 2:$ 5>= Sheet2!B $ 1、Sheet1!= Sheet2!B $ 2、行(Sheet1!$ A $ 2:$ A $ 5)-ロウ(Sheet1!$ A $ 1))、行(1:1))、1)、 "")

応答3# ->にスキップ
4 #
Saransh

H Ashish、

私はこの式を解釈しようとしていますあなたはあなたの公式全体の背後にあるあなたの論理の簡単な条件で説明しますか?それはうまくいきますが、私はそれを理解したいです

私は小さな機能と行関数を調べましたが、あなたがそれを使用している方法を理解していませんか?

例えば、私の質問のいくつかは次のとおりです.

1.なぜ=行(Sheet1!$ A $ 2:$ A $ 5)利回り2

2.なぜあなたは小さな機能を使わなければならないのですか?

3.索引関数を使用しているindex関数を使用していますか.index関数を使用しているのか、なぜ?

応答4# ->にスキップ
6 #
AshishM

こんにちは、

これがあなたの質問に対する答えです:

  1. ROW()関数は結果として配列を生成します.その配列の値は2、3、4、5になります.したがって、2つの条件が満たされている場合は、行番号の配列を作成します.ワークシートの行番号をtableの行番号に変換するために1を引いています.
    したがって、結果は1、2、3、4になります.
  2. SMALL()関数は、結果が
    • tableの行番号が最も小さい値
    • tableの行番号が2番目に小さい値
    • tableの行番号が3番目に小さい値
    • 4番目に低いtable行番号の値
  3. いいえ.ほとんどの場合、MATCH()関数はINDEX()関数と共に使用する必要がありますが、常にそうであるとは限りません.INDEX()関数の行引数がSMALL()関数によって返されています.列の引数は1(最初の列)に固定されています.

これが明確になることを願っています.

5 #
Jeovany

Hisaranshmidha

お試してお試しください

サブ移動データ()

DIM SH1、ワークシートとしてSH2

DIM SCORESRNG、num範囲

DIM i、j、k長

SET SET=ワークシート(「Sheet1」)

SET SH2=ワークシート(「Sheet2」)

'' ''の出力データ開始行

i= 2

j= 2

k= 2

'' 'Sheet2

の古い出力データを削除する

SH2.RANGE(セル(2、 "A").終了(XLTORIGHT)、セル(2、 "A").終了(XLDOWN)).クリアコンテンツ

SH1.ACTIVATE

SH1

'' 'データ(数字)は行2

から始まります

scoresrng=.range(セル(2、 "b")、セル(行; count、 "b").終了(XLUP)

'' 'ループすべてのスコア数

SCORESRNG

の各数値

ケースを選択NUM.VALUE

ケースは<30

です

SH2.Cells(i、 "A").値=.cells(num.row、 "a").値

i= i + 1 ''出力行増分

ケースは<50

です

sh2.cells(j、 "b").値=.cells(num.row、 "a").値

j= j + 1 ''出力行増分

ケースは<70

です

SH2.Cells(k、 "c").値=.cells(num.row、 "a").値

k= k + 1 ''出力行増分

終了

次のnum

で終わります

msgbox "All Done"

終了SUB

あなたの説明に従って

行1は両シートのヘッダー用であり、データは2行目から下方に起動します.

入力データ

出力データ

選択ケースメソッドの選択に関する詳細が必要な場合は、下のリンクをクリックしてください

https://www.youtube.com/watch?v=fvnirrr30mus&t=329s.