人に聞けない痔の悩み、これでスッキリ >>

エクセルで、ドロップダウンリストの内容を、条件によって変えられるようにしたいのですが、教えて頂けるでしょうか。

例えば、A列に勘定科目名、B列に補助科目名を書いていきます。
具体的には、
勘定科目(1):旅費交通費 → 補助科目:電車、バス
勘定科目(2):交際費   → 補助科目:飲食代、贈答品
といった、関係です。

勘定科目名が少なければ、A列もドロップダウンリストにして、B列のドロップダウンリストにIndirect関数を使用すればいいようです。

ただ、勘定科目は、数十科目あります。
A列の勘定科目をドロップダウンリストにすると、かえってリストから選ぶのが大変になってしまいます。

そのため、A列は、直接入力のような形にして、そのうち、補助科目があるものについてだけ、B列でドロップダウンリストから選べるようにできないでしょうか。

なお、補助科目を持っているのは、10科目程度です。


エクセルの数式だけで簡単にできれば一番良いですが、難しいのであればVBAでトライしてみようかと思っています。
(あまり、VBAは得意ではないですが)

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

>勘定科目名が少なければ、A列もドロップダウンリストにして、B列のドロップダウンリストにIndirect関数を使用すればいいようです。



今回のご質問は、名前定義とINDIRECT関数を使った入力規則で、ご希望の操作が全く問題なく実行できると思うのですが、どの部分が問題となっているのでしょうか?

>A列の勘定科目をドロップダウンリストにすると、かえってリストから選ぶのが大変になってしまいます。

そもそも手入力するのは、同じデータをご入力して異なる値にするなど集計上いろいろな問題を発生させますので、仮に手入力する場合でも(ドロップダウンリストから選択しない場合でも)上記の入力規則は設定しておく必要があります(間違えたデータを入力したら警告を出してくれます)。
    • good
    • 0

再び[No.2]の誤謬訂正


添付図 Fig-2 が間違ってました。此処の添付図と入れ替えて読んでください。
「条件によりドロップダウンリストの内容を変」の回答画像4
    • good
    • 0

[No.2]の誤謬訂正


ステップ5の「Fig-3」は「Fig-4」の間違いでした。(言わずもがな?)
    • good
    • 0

添付図のようなものは如何ですか?


概略の手順は次のとおりです。
(これは Excel 2002 の場合なので、貴方のバージョンに合わせて読んでネ)
1.Fig-1 に示す表の作成
2.次の範囲名を作成
  範囲名   範囲
  勘定科目  F1:H1
  旅費交通費 E2:E7
  接待交際費 F2:F8
  勘定科目3  G2:G5
  勘定科目4  H2:H6
3.セル A1、B1 に次の[入力規則]を設定
    [入力値の種類] [元の値]
  A1: リスト     =勘定科目
  A2: リスト     =INDIRECT(A1)
セル A1(B1) を選択して表示される右下の▼ボタンをクリックして表示されるドロップダウンリストを Fig-2(Fig-3)に示した。
4.範囲 A1:B1 を下方にズズーッとドラッグ&ペースト
5.各セルのドロップダウンリストから選択した結果を Fig-3 に例示した。
「条件によりドロップダウンリストの内容を変」の回答画像2
    • good
    • 0

私が業務で使用している日報がまさしくソレです。


関数全てを把握せず作ったんで余計に面倒な関数となっている可能性はありますが・・・

使用するシートは3枚

まずシート3に勘定項目と補助項目を纏めたリストを作ります
(勘定項目をA、補助項目をB~Dとします、勘定項目は5と仮定します)
シート1のA列はシート3のA1~A5をプルダウンメニューで選択する様にする
B1はシート2のB1~D1をプルダウンメニューで選べるようにする、B2以降は同様に1つづつずらす
シート2のA1はシート1のA1が反映されるようにする、A2以降は同様にひとつずつずらす
B1~D1はA1を参照してシート3のリストの値を引っ張るVLOOKUP関数とする
B2以降も同様

これでシート1のAで勘定項目を選べば、
B1にそれに沿った補助項目をプルダウンメニューにする事が出来ます。
わずかでも異なるとエラーになるのでA列もプルダウンリストにした方がミスがないと思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QRange("A1")⇔cells(1,1)の変換。

EXCELのマクロについて質問します。
Range("A1")⇒(1,1)
cells(1,1)⇒("A1")
に一発変換する方法を教えて下さい。
時間があるかた宜しくお願いします。

Aベストアンサー

こんなのでよろしいでしょうか?
range("A1") → Range("A1").Row & "," & Range("A1").Column
cells(1,1) → Cells(1, 1).Address(False, False)
()や""は付けていません

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBA シートのボタン名を変更したい

こんにちは。
Excelのマクロを作成しているのですが、
ユーザーフォームではなく、
シートにあるフォームのボタンの名前を変更したいのです。
どうしたら変更できるのでしょうか。
わかるかたいらっしゃいましたら、教えてください。

よろしくお願いします。

Aベストアンサー

#2です。

> Application.callerで取得するボタン名を
> 変更したいのです。

了解です。
ボタンを選択します。そうすると、左上の「名前ボックス」に「ボタン1」とか表示されますね?
そこで名前ボックスの中を変更し、Enterキーです。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

QエクセルVBA 「On Error GoTo 0」について

「On Error GoTo 」ステートメントの意味は、だいたい理解しています。
「On Error GoTo 0」 ステートメントについて、ご教授お願いします。
参考書には「エラーのトラップ処理を無効にする」と載っていましたが、よくわかりません。
具体的にどのような使い方をするのか、簡単なコードで説明していただければ幸いです。
よろしくお願いします。

Aベストアンサー

#3の回答者ですが、コードのどこが原因か特定し、実行時エラーとして、そのエラーが不可避な場合において、On Error Resume Next を付けますから、On Error Goto ErrHandler よりも、扱い方が難しいです。当然、その部分だけの範囲を囲うので、On Error Goto 0 を入れると思いますし、今では、使う場面が限定されているはずです。

後はテキストを参考にしてください。当面、このようなコードが必要になることはないと思いますが。

QVBAでドロップダウンリストを連動させたものを作るには?

VBAでドロップダウンリストを連動させたものを作ることが出来ますでしょうか?

今まで入力規則の設定をつかって見ていましたがどうやら実現不可能と思われることが分かってきました。
VBAでの連動したリストの代替案を考えていますが・・・
いい方法は無いでしょうか?

このページのようなことがやりたいと思っています。
http://www.relief.jp/itnote/archives/000822.php

Aベストアンサー

質問内容はありふれたもので、パターン的には判るが、具体的内容が漠然としていて、回答を書くとすると、回答者が実例など全部お膳立てしないとならない。
そこまで回答者にやらすのは、質問者のとる態度ではなかろうと思う。
INDIRECTの例を知りながら、質問者の課題に対しては、できないといっている点は何か、も書いてない。
一般論では
入力者が選択したデータに、
A.選択データの変化に相応するイベントを使う
B.ドロップダウンのアイテムを絞り込む(SQLの実行などが一番よいが、VBAでは使わない場合が多いので、他の方法で検索・抽出する)
の2点が課題と思う。特にデータの階層が複雑な場合は、Bが学習の
課題でしょう。


人気Q&Aランキング