特定の数値範囲内の値を抽出する

特定の数値範囲内の値を抽出する

Excelスプレッドシートに「AP」列があり、各セルに次のような値が含まれています。

5358  161043   22344   8444   103145  69221044 

「5358 161043 22344 8444 103145 69221044」はすべて 1 つのセル (この場合は AP2) です。混乱しているのはわかっていますが、他の誰かから継承したものなので、整理しようとしています。

6623 から 12756 までの数値範囲内の値を抽出する方法が必要です。この範囲外のすべての値を削除する検索および置換コマンド、または問題の値を別の列にコピーする関数のいずれかを使用できます。

答え1

ダミーデータを作成し、シートの列 A に入力しました。列 B では、次の数式を使用しました。

=IF(AND(A1>=$L$35,A1<=$L$36),"Yes","No")

これは、対象範囲内の値に対して「はい」を返す単純なフィルターです (セル L35 と L36 にドロップしました)。

ここに画像の説明を入力してください

次に、これら 2 つの列を選択し、フィルターをオンにします。

ここに画像の説明を入力してください

次に、[ホーム] タブで [編集] リボンに移動し、[検索と選択] を選択します。[特別なオプションへ移動...] というオプションを選択します。

「表示セルのみ」というオプションを選択し、「OK」を押します。

[コピー] を押すか、CTRL-C を使用します。これにより、必要なデータを含む行のみが選択されます。

ここで、空白のシートに貼り付けると、希望する日付範囲に対応するデータのみが貼り付けられます。注: この例では、ヘッダーの行 1 を空白のままにしなかったため、フィルターを適用すると、「いいえ」が 1 つ残りました。この残りを削除するか、先頭に空白行を残して、そのようなことが起こらないようにします。

答え2

まず、標準モジュールに次のユーザー定義関数を入力します。

Public Function GrabData(r As Range) As String
    Dim cel As Range, v As String, a, d As Double

    GrabData = ""

    For Each cel In r
        v = cel.Text
        arr = Split(v, " ")
            For Each a In arr
                If IsNumeric(a) Then
                    d = CDbl(a)
                    If d > 6622 And d < 12757 Then GrabData = GrabData & " " & a
                End If
            Next a
        Next cel
End Function

次に、データがある場合AP1を通してAP3別のセルを選択して次のように入力します。

=GrabData(AP1:AP3)

例えば:

ここに画像の説明を入力してください

ご覧のとおり、値はスペースで区切られた入力と同じように文字列です。

関連情報