よろしくお願いします!
簡単と思っていましたがわからず、ネット検索してもほしい結果がなかったので、
質問させていただきます。

同一シート内で、

A列に連番を振ってある表がA10以下にあります。(9行目がこの表の見出し行)

G6セルに、抽出したい連番の数字を入れると、

A2(2行目)に、行を抽出したいのです。
(A1に9行目と同じ見出しがあります)
(1~3行目は、作業列として、非表示にします。)

VLOOKUPで、1行そのまま抽出できればいいのに、というところです。
よろしくお願いします!

A 回答 (4件)

こんにちは!



仮にZ列までデータがあるとすると

A2セルに
=VLOOKUP($G6,$A10:$Z$10000,COLUMN(A1),0)

として右へコピーではどうでしょうか?
※ エラー処理はしていません。m(_ _)m
    • good
    • 1
この回答へのお礼

あ!tom04様、いつもありがとうございます~!
できそうで、できない…結果、VLOOKUPでできているので、
自分の応用力の無さと頭の固さが情けないです。
必要な列数に変更して、この関数を使わせてもらいます!
助かりました!
また、よろしくおねがいします!

お礼日時:2017/04/14 17:04

A2に以下を入れ、B列以降右にコピペ


=VLOOKUP($G$6,$A$10:$Z$18,COLUMN(A2),FALSE)

$Z$18はZ列まで対象と言う事だから、BB列まであるなら
$BB$18とする。
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます!
よく調べて、関数を試行錯誤した上で、
最終的にここで質問していますが、
最近、質問の頻度が高くてすみません。
(自分がよくよく考えてもわからなかったことを、
数分で答えを出してくださる回答者様に
爽快さを感じているところもあるので、
質問を繰り返してしまうところがあります)

今回は、1番最初に回答くださった方にBAしますが、
また見かけましたら、よろしくお願いします!

お礼日時:2017/04/14 17:16

必要なセルすべてに対してVLOOKUP関数を記述すればいい。



横着したいなら、No.1で回答されているように「絶対参照」と「相対参照」を上手く利用して効率よく数式を入力することをすることを覚えましょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
考えても考えても、わかりそうでわからずで、
すべてのセルに貼ればいいことすら今日は思いつ来ませんでした。
確かに、今日は横着したい脳みそでした。
見破られてしまった感じです。
精進します、すみません。

お礼日時:2017/04/14 17:09

VLOOKUPで抽出できるのはセル。

1行丸まるとは行かない。
    • good
    • 0
この回答へのお礼

単純にしか関数を使えないレベルから、
なかなかレベルアップできません。。。
t_fumiaki様、いつも回答ありがとうございます!
また、よろしくおねがいします!

お礼日時:2017/04/14 17:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

Q10行目が見出しです。 E列11行目から下方にデータが無ければ データがありません。のメッセージが出

10行目が見出しです。
E列11行目から下方にデータが無ければ
データがありません。のメッセージが出てマクロ終了。
一つでも入っていたらマクロ続行。
と、いうマクロを教えてください。
よろしくお願いします。
エクセル2013

Aベストアンサー

こんにちは!

今行っている処理の前に↓の4行のコードを追加してみてはどうでしょうか?

If Cells(Rows.Count, "E").End(xlUp).Row = 10 Then
MsgBox "データなし"
Exit Sub
End If

Qエクセルで行列複数の一覧表の特定の値から、行見出し(列見出し)を関数で抽出する

以下の方法を教えてください。

【エクセル一覧】
    A県   B県   C県  D県
みかん 200   250   180  260
りんご 160   120   130  228
バナナ 113    122   116  125
メロン 1200   1500  1700  1820

116なのは?

→バナナ・・・関数で抽出
→C県・・・関数で抽出

お手数をおかけしますが。。。お願いしますm(__)m

Aベストアンサー

こんばんは!

一例です。
数値に重複がない!という前提で・・・

↓の画像で
H3セルに
=IF(COUNTIF(B2:E5,G1),INDEX(A2:A5,SUMPRODUCT((B2:E5=G1)*(ROW(A2:A5)-1))),"")

H4セルに
=IF(COUNTIF(B2:E5,G1),INDEX(B1:E1,SUMPRODUCT((B2:E5=G1)*(COLUMN(B1:E1)-1))),"")

という数式を入れています。

※ 万一重複がある場合は
別の方法を考える必要があります。m(_ _)m

QA列の下2桁だけが連番でなかったら1行だけを挿入するマクロは?

基本は、A列の下2桁 ( 各連番が複数ずつあります ) だけが連番になっているんですが、 "たまに"  抜けている ( ない ) 時がありますので、
マクロ実行後に、連番が抜けている ( ない ) 場合に、そこに 「 1行だけ を挿入 」 して、 かつ その行のFS列 ( 175列目 ) まで  ハイフン 「 - 」  を入力したいんです。
そして、必ずデータエリア数を   12  or  24  or   36   にしたいんです ( マクロ実行前は 36 を超えることはありません )。  
連番が抜けている ( ない ) 場合、多くても 4・5つのデータエリア です。
3通り のマクロが必要のように思いますが、下記例の 1通り をどうかご教授下さいませ。
----------------------------
**01 が 約10~19行 ( 変動します ) まであります ( これを エリア数1 と表現させて頂きます )。
そして、他の 「 **02 ~ **12 」 も同様です。これで 合計エリア数12 となります。
「 **01 ~ **12 」 は、必ず昇順になっています。

下記例は、
エリア数を 実行後 24 にしたい場合の例です ( この場合、実行前は 24 を越えることはありません )。
「 最初の **01 ~ **12 」 のうち 「 **02 」 と 「 **12 」 が抜けている ( ない ) 場合です。 

実行前 ( エリア数22 です。「 **02 」 と 「 **12 」 が抜けている ( ない ) )
A列
**01

**01
**03

**03

**11

**11
**01

**01
**02

**12
**12

↓↓↓
実行後 ( 挿入した2行を エリア数2 としまして、 合計エリア数24 となります )
A列   B列   ・   ・   FS列 
**01

**01
-      -    ・   ・   -
**03

**03

**11

**11
-      -    ・   ・   -
**01

**01
**02

**12
**12

基本は、A列の下2桁 ( 各連番が複数ずつあります ) だけが連番になっているんですが、 "たまに"  抜けている ( ない ) 時がありますので、
マクロ実行後に、連番が抜けている ( ない ) 場合に、そこに 「 1行だけ を挿入 」 して、 かつ その行のFS列 ( 175列目 ) まで  ハイフン 「 - 」  を入力したいんです。
そして、必ずデータエリア数を   12  or  24  or   36   にしたいんです ( マクロ実行前は 36 を超えることはありません )。  
連番が抜けている ( ない ) 場合...続きを読む

Aベストアンサー

以下のマクロは抜けている部分に行を追加します。質問文に「1行だけ」とありましたが、連続で抜けている場合はデータエリア数を12の倍数に合わせるために、抜けた数だけ行を挿入しています。

A列の下二桁が数字でない場合はエラーとなります。

Option Explicit

Sub RowsSearch()

Dim i As Integer
Dim n(1) As Integer

i = Range("A65536").End(xlUp).Row '最終行の取得

'最後のデータエリアが抜けている場合
n(1) = CInt(Right(Cells(i, 1).Value, 2))
If n(1) <> 12 Then
Range("A" & i + 1 & ":FS" & i - n(1) + 12).Value = "-"
End If

For i = i To 2 Step -1

'該当セルと上のセルの末尾二桁を取得
n(0) = CInt(Right(Cells(i - 1, 1).Value, 2))
n(1) = CInt(Right(Cells(i, 1).Value, 2))

'末尾が同じ場合、1増えた場合(5→6など)、11減った場合(12→1)は何もしない
If n(1) = n(0) Or n(1) = n(0) + 1 Or n(1) = n(0) - 11 Then

'末尾が減った場合
ElseIf n(1) < n(0) Then
Range(i & ":" & i - n(0) + n(1) + 10).Insert Shift:=xlDown
Range("A" & i & ":FS" & i - n(0) + n(1) + 10).Value = "-"

'末尾が増えた場合
Else
Range(i & ":" & i - n(0) + n(1) - 2).Insert Shift:=xlDown
Range("A" & i & ":FS" & i - n(0) + n(1) - 2).Value = "-"

End If

Next i

'先頭のデータエリアが抜けている場合
If CInt(Right(Cells(1, 1).Value, 2)) <> 1 Then
n(1) = CInt(Right(Cells(i, 1).Value, 2))
Range(1 & ":" & n(1) - 1).Insert Shift:=xlDown
Range("A" & 1 & ":FS" & n(1) - 1).Value = "-"
End If

End Sub

以下のマクロは抜けている部分に行を追加します。質問文に「1行だけ」とありましたが、連続で抜けている場合はデータエリア数を12の倍数に合わせるために、抜けた数だけ行を挿入しています。

A列の下二桁が数字でない場合はエラーとなります。

Option Explicit

Sub RowsSearch()

Dim i As Integer
Dim n(1) As Integer

i = Range("A65536").End(xlUp).Row '最終行の取得

'最後のデータエリアが抜けている場合
n(1) = CInt(Right(Cells(i, 1).Value, 2))
If n(1) <> 12 Then
Range("A" & i +...続きを読む

QEXCELの表、組[A列]:番号[B列] を 組[A列]:番号[行]に変換する方法

EXCELに
A列に組、B列に番号がそれぞれ反映されている表があります。
これを
A列に組、同行に番号が横並びに配置された状態に変更したいと考えております(添付画像)。

D列にはA列の組名を「重複なし」で貼り付けます。
このとき、E列~K列にどのような数式を入力すればよろしいでしょうか?
E1に入力する数式を教えていただけるとありがたいです。
何卒よろしくお願いいたします。

Aベストアンサー

こんばんは!

画像の配置だとE1セルに
=IF($D1="","",IFERROR(INDEX($B$1:$B$1000,SMALL(IF($A$1:$A$1000=$D1,ROW($A$1:$A$1000)),COLUMN(A1))),""))

配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → E1セルを選択 → 数式バー内に貼り付け →そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。

最後にE1セルのフィルハンドルで列・行方向にずぃ~~~!っとフィル&コピーします。

こんな感じではどうでしょうか?m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報