『忠犬もちしば』のAIを育てるとグッズが貰える!>>

VBAについて教えてください。

A列に”WH”という文字が含まれていたら、
I列に”=VLOOKUP(A5,[材料使用予定表マクロ.xlsm]フタミ箱集計!$E$3:$O$200,6,FALSE)”
という関数を入力したいです。

[材料使用予定表マクロ.xlsm]フタミ箱集計は入力したいブックとは別のブックです。
A列に”WH”は複数あります。
全データは2000行あります。

ど素人が調べてやってみても時間が過ぎるばかりでした・・・
お力を貸してくださいm(__)m

質問者からの補足コメント

  • I列のデータある行全てに別の関数入れてから処理しようと思っていたので、難しく考えていました。
    別の関数とIF関数の合わせ技でやってみます。

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/01/22 07:23

A 回答 (4件)

もしくは、IF関数でA列のセルに”WH”という文字が含まれていたらVLOOKUPの式、そうでなければ空白(か、お好みの結果)という式を全部に入れるとか。



>ど素人が調べてやってみても
どういうことをやったみたのかくらいは書いていただきたいですね。
この回答への補足あり
    • good
    • 0

此も、


恐らく 此のままでは、
動かないので、
但の ヒント止まりですが、

Option eclipse
Option Base 0

Const 検索対象 As String = "WH"
Const I列 As long = 9

Sub テスト1()
Dim Ws(1) As Worksheet,WsN As String
 Set Ws(0) = ActiveSheet
 Set Ws(1) = Worksheet.Add _
  (After:=Worksheets(Ws(0).Name))
 Ws(0).Active
 WsN = Ws(1).Name
' Set Ws(1),Columns(I列) = _
'  Ws(0).Columns(I列)
 Ws(1).Columns(I列).formula = _
  ”=VLOOKUP(A5,[材料使用予定表マクロ.xlsm]フタミ箱集計!$E$3:$O$200,6,FALSE)”
 Ws(0).formula = Evaluate( _
  "IF(" & Ws( 0 ).Columns(1) _
  & "=" & 検索対象 & "," _
  Ws(1).Columns(I列).formula ,  _
  Ws( 0 ).Columns(I列).formula & ")"
 )
 Set Ws = Nothing
 Application.DisplayAlerts = False
 Worksheets(WsN.Name).Delete
 Application.DisplayAlerts = True
End Sub
    • good
    • 0

此のままでは 動かないので、


あくまで ヒントですが、

こんな感じで。


Option Explicit
Const 検索対象 As String = "WH"
Const I列 As long = 9

Sub テスト()
Evaluate("
 OFFSET($A$1,
  small(
   index
    (($A:$A=検索対象)*row($A:$A)
    +($A:$A<>検索対象)*999999999999999
   ,,)
   ,row(
    offset($A$1,0,0,
     SUMPRODUCT((($A:$A=検索対象)+0)
    ,1)
   )
  )-1
  ,I列-1
  ,1
  ,1
 )
").formula = ”=VLOOKUP(A5,[材料使用予定表マクロ.xlsm]フタミ箱集計!$E$3:$O$200,6,FALSE)”
End Sub


セルアドレッシングを、
.Range(○,×).Address
とかに 変え、

OFFSET構文では なく、
Rangeで、
多領域扱いで アドレッシングして、

Variantか、Rangeで、
受け取って、

.formula=
と すれば、
良いかな?

Loop等、場合により、
VBAには 不要ですよね。


でも、
Evaluate構文値の 受け取り、
難しいのだよね。


まぁ、頑張ってみてくださいよ、

恐らく こういった物が、
最速クラスの 処理記載法ですから。
    • good
    • 0
この回答へのお礼

丁寧に例文書いてくださってありがとうございます!

お礼日時:2019/01/23 06:21

>A列に”WH”という文字が含まれていたら


という条件でオートフィルタで抽出してから、I列に式を入れたらいいのでは?
    • good
    • 0

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

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

Qエクセル2013 複数の列の表示非表示一発で切り替えたい

エクセル2013 複数の列の表示非表示を切り替えするにはマクロでしょうか?

過去にエクセル2005ぐらいだったかと思いますが飛び飛びの点々としたセルの内容を一斉に削除するというボタンを作ったことがあり、
それを参考に今回2013で複数の列を表示・非表示切り替えできないかと試したものの全くついていけません。
普段数式でもやっと扱う程度ですのでできるだけ簡単にこのようなことが実現できる方法はないでしょうか。

具体的には1~12月の参照にする列を数項目につき設置したので、
全表示だと「項目A・1月列・2月・3月・・・~12月・計の列」「項目B・1月列・2~~~」となっています。
これを各月の作業の邪魔にならないように例えば各項目の1月分を入力する時だけ2~12月列は非表示、
同じく2月の入力時は1月列と3~12月を非表示、2月の列だけ登場させるという形で、12ヶ月分のパターン+全月非表示の計13パターンがほしいところ。
全体ではA~GIの列数があり、各項目ごとに手作業で選択すると毎回大変なので、部分的に非表示・表示となる一発操作をしたいのですが、こんなことできますか?

エクセル2013 複数の列の表示非表示を切り替えするにはマクロでしょうか?

過去にエクセル2005ぐらいだったかと思いますが飛び飛びの点々としたセルの内容を一斉に削除するというボタンを作ったことがあり、
それを参考に今回2013で複数の列を表示・非表示切り替えできないかと試したものの全くついていけません。
普段数式でもやっと扱う程度ですのでできるだけ簡単にこのようなことが実現できる方法はないでしょうか。

具体的には1~12月の参照にする列を数項目につき設置したので、
全表示だと「...続きを読む

Aベストアンサー

No2さんもおっしゃっていますが、「ユーザー設定ビュー」が簡単かと

http://cblog.crie.jp/excel/293/
http://www4.synapse.ne.jp/yone/excel/excel_user_view.html

Q何故このようなプログラムだとエクセルに書き込めないのか教えてください。

何故このようなプログラムだとエクセルに書き込めないのか教えてください。

Aベストアンサー

私もPythonは研究を始めたばかりですが、まさかopenpyxlとかのExcel操作ライブラリがインストールされてないなんてオチはないですよね?

あとsheet1.write(str… ってなってますが、ここはセル番地の指定だからstrでは文字列になっちゃうのでまずいと思います。変数countは数値なんだから、そのまま sheet1.write(count, 0 ,str(inputvale)) でいけるのでは?

QエクセルVBAの書き方を教えて下さい

写真のようなリストがあります。(下の方に20人分ぐらい続きます)
マクロで以下の事をしたいのでVBEでの書き方(?)を教えて下さい。

①表の中の赤色のセル(E-AI列の8行目・12行目・16行目・・・表の中の最後(一番下)まで)の表示形式が「文字列」になっているので、全て「標準」に変える(赤色のセルのみです)

②8行目の赤色のセルのE-AIをコピーして12行目・16行目・・・表の中の最後(一番下)までに書式を張り付ける

※①が完了した後、手動で少しいじってから②を実行したいので、②は別に教えて下さい。(①と②を別に記憶させる)
※表は日によって(在籍人数によって)最終行が変わるので自動で最終行を検知し、ストップしてほしいと思います。

宜しくお願い致します。

Aベストアンサー

こんばんは!

A列で最終行を取得するようにしていますので、A列には何らかのデータが入っている!という前提です。

まず①から

Sub Sample1()
 Dim i As Long
  For i = 8 To Cells(Rows.Count, "A").End(xlUp).Row Step 4
   Range(Cells(i, "E"), Cells(i, "AI")).NumberFormatLocal = "G/標準"
  Next i
End Sub

次に②ですが、数式をコピー&ペーストしたい!というコトですが、
8行目の数式はE列の数式を右にAI列までフィル&コピーしている!という前提です。

Sub Sample2()
 Dim i As Long
  For i = 12 To Cells(Rows.Count, "A").End(xlUp).Row Step 4
   Range(Cells(i, "E"), Cells(i, "AI")).Formula = Range("E8").Formula
  Next i
End Sub

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

こんばんは!

A列で最終行を取得するようにしていますので、A列には何らかのデータが入っている!という前提です。

まず①から

Sub Sample1()
 Dim i As Long
  For i = 8 To Cells(Rows.Count, "A").End(xlUp).Row Step 4
   Range(Cells(i, "E"), Cells(i, "AI")).NumberFormatLocal = "G/標準"
  Next i
End Sub

次に②ですが、数式をコピー&ペーストしたい!というコトですが、
8行目の数式はE列の数式を右にAI列までフィル&コピーしている!という前提です。

Sub Sample2()
 Dim i As Long
 ...続きを読む

Qエクセル関数

式の中の参照部分を、D1のセルの内容によって変えたいです。
下記が実際の式なのですが
=IFERROR(IF(VLOOKUP(I6,[工場在庫.xlsm]A!$D$3:$D$1000,1,FALSE)=I6,"OK","新規追加!!"),"新規追加!!")

この式の [工場在庫.xlsm]A! の部分をD1のセルから持ってくるにはどうしたらいいかがわかりません。
D1のセルが[工場在庫.xlsm]B!だったら
=IFERROR(IF(VLOOKUP(I6,[工場在庫.xlsm]B!$D$3:$D$1000,1,FALSE)=I6,"OK","新規追加!!"),"新規追加!!")
としたいです。
ご教授お願いいたします。

Aベストアンサー

こんにちは

簡単にやるなら、INDIRECT関数を利用して参照範囲を可変にすればよさそう。

[工場在庫.xlsm]A!$D$3:$D$1000
  ↓ ↓
INDIRECT(D1 & "$D$3:$D$1000")

ただし、INDIRECT関数等は揮発性関数と言われる種類ですので、他の方の質問でこのような(↓)ものもありますのでご注意。
https://oshiete.goo.ne.jp/qa/10893054.html

Qエクセルでの転記の方法について

指定した範囲内で、条件を満たすセル(①)と同列の別のセル内の文字を、①と同行の別のセルに転記する方法はありますか?
検討違いな質問をしていたら申し訳ありません。

画像を添付しています。
パソコンの画面を撮影したため、見辛くてすみません。
画面右の文字が読みづらいと思いますので、こちらに記載します。
「←黄色の範囲内で●がついている人の名前を(この場合は”山田“)、水色のセルに転記したい」

Aベストアンサー

G3: =IFERROR(INDEX(B$2:F$2,MATCH("●",B3:F3,0)),"None")

Qエクセルについて。

次の数式を求める関数(下の方のプラン表)は、どんな数式を打てば良いのでしょうか?教えていただけると幸いです。

Aベストアンサー

単純な足し算ですよね。
添付画像のように作ったとして

[C8]=SUM($B$2,C$7,$B8)

これを[C8:F12]の範囲にコピーすればOK。

通常、数式のセルは、コピー貼り付けすると、移動先に応じてセルアドレスが変わってしまいますが、
「$」をつけることで、固定することができます。

上の式だと、どこに移動しても

$B$2 は B2 を参照するように固定される。

C$7 は 7行目 を参照するように固定される。
(式を下にコピーしても、7行目に固定される)

$B8 は B列 を参照するように固定される。
(式を右にコピーしても、B列に固定される)

ということになります。
$をつけて参照先を固定するのを「絶対参照」、
つけていない普通の場合は「相対参照」、
と言います。
より詳しいことは、このキーワードで検索して調べてみてください。

金額表示については、セルの書式から、
分類:通貨
記号:\
にしてあります。
実際のセルに「\」は入力されていません。

Q月末の自動計算

月末火曜日の日付をスタートとして稼働日数を求めたいと思っています。

10月なら9/25~10/30まで
11月なら10/30~11/27まで
12月なら11/27~12/25までの日数を計算したいです。

月末水曜日になると当月の日数に自動で計算が切り替わるよう計算することは可能でしょうか。

わかる方がいれば教えていただきたいです。
※土日は日数に含んでOKです。

Aベストアンサー

No1です

>先程試したところ8と表示されるのですが11/28~今日までが8日という計算でしょうか?
はい。下に示しますように『今日』を対象に計算する式として作成してしまいましたので、12/5(=本日)は11/27(=最終火曜日)から数えて8日目という意味になります。
(シートが自動計算の設定になっていれば、明日になると9と表示されるはずです)

私の勝手な勘違いだったかもしれませんが、「今日が月末火曜日から何日目かを計算する」関数式として考えていましたが、対象が「今日」とは限らなかったのでしょうか?
その場合は、式中の「TODAY()」の部分を対象の日(=シリアル値)に置き換えればそのまま同じ計算が可能なはずです。
例えば、対象の日がA1セルに入力されているとするなら、TODAY()を全てA1に置き換えればよいといった感じです。

>ただ、水曜日になったら前日の火曜日分も含めて計算してほしいです。
翌日の水曜日を2日目と計算したいという意味でしょうか?
(No1の説明を読んでいただければわかりますが)現在の式は、水曜日は1(日目)と表示される式になっています。
修正したい場合は、No1の式より常に1日多い値になれば良いだけなので、式の最後に「+1」を加えれば、お求めの結果になると思います。

>とても複雑な回答で解読できなかったので教えていただけると幸いです
式は少々長いですが、全体としての構成は、単純にIFで場合分けした式になっています。
ご参考までに、大雑把な構成を言葉で示すならば・・・
『対象日(今日)がその月の最終火曜日より前なら、前月の最終火曜日からの日数を数え、後ならその月の最終火曜日からの日数を数える』
という式になっています。

No1です

>先程試したところ8と表示されるのですが11/28~今日までが8日という計算でしょうか?
はい。下に示しますように『今日』を対象に計算する式として作成してしまいましたので、12/5(=本日)は11/27(=最終火曜日)から数えて8日目という意味になります。
(シートが自動計算の設定になっていれば、明日になると9と表示されるはずです)

私の勝手な勘違いだったかもしれませんが、「今日が月末火曜日から何日目かを計算する」関数式として考えていましたが、対象が「今日」とは限らなかったのでしょう...続きを読む

QEXCELの配列数式がうまくいきません

EXCELのシートで1行目に各列の項目名、2行目以降にそのデータがあり、A列に日付、B列に数値があるとします。
そこで、ある年(例えば2018年)のB列の最大値を求める下の式で求まる値は0なります。何が悪いのでしょうか?
修正方法をご教示頂きたくお願い致します。

   {=MAX(IF(ROW(A:A)>1*YEAR(A:A)=2018,B:B))}

Aベストアンサー

こんにちは。
間接的な問題は、「EXCELのシートで1行目に各列の項目名」がややこしくしいるのでしょうね。

=MAX(IF(ISNUMBER(A:A),(YEAR(A:A)=2018)*(B:B)))
配列の確定をしてください。 A:A と全行を対象とせずに、項目の部分を除いて、データのある範囲だけを代入すれば、もっと簡単にできたと思います。

また、一例ですが、配列を使わない考え方だと、このようになります。
INDEX関数は不思議な機能を持っているようです。

=MAX(INDEX(A:B,MATCH("2017/12/31"*1,A:A,1),2):INDEX(A:B,MATCH("2018/12/31"*1,A:A,1),2))

なお、ifの条件で、カンマはひとつでも良いです。

QINDIRECT関数の代替方法は?

先に本スレッドで下記数式を教わり問題を解決することが出来ました。
  =SUM(INDIRECT("E"&MATCH("AAA",A:A,0)&":"&"E"&MATCH("AAA",C:C,0)))
ただ、このINDIRECT関数により、ブックに変更がなくても終了時にブックの保存の要否が尋ねられます。
これを回避するためにINDIRECT関数の使用を止めたいのですが、その方法をお教えいただきたくお願いします。

Aベストアンサー

ちょっと気になったので一言だけ。
別の人がこのシートを使って試算をしたとします。保存しなければいいやと思ってバッテンをクリックしたら「保存しますか」のメッセージが出ずに、いきなり保存されてしまいました。ってことのなりませんか。
ここは作業列を作ってシンプルな式で対応した方が安全な気がします。

Qエクセルで関数を用いて表を作成したいです。

スポーツ評価をした結果を自動で表示されるものを作成したいと思っています。
評価内容は、モビリティ:①ASLR ②ショルダーモビリティ
モーターコントロール:③ロータリースタビリティ ④トランクスタビリティ
ファンクショナルパターン⑤インラインランジ ⑥ハードルステップ ⑦ディープスクワット
各①〜⑦の結果は、最適・合格・不合格

結果をもとに優先順位1位 2位 3位 4位を決めたいです。優先順位の仕方としては、一つ目は不合格である事がまず一つ。二つ目は、ファンクショナルパターンよりも、モーターコントロールよりも、モビリティを優先させる。3つ目は、①から⑦を上から順番に選択。

例え①不合格、②合格、③合格、④不合格、⑤合格、⑥合格、⑦合格
優先順位1位① 2位④ 3位② 4位③

関数を用いて可能だと思うのですが、わからないのでお願い致します。

Aベストアンサー

No.1です。

>順位まで出すことが出来たのですが、一位~4位に表示された①~④を文字で表す事は可能ですか?
>例えばb3が①→ダンベルという表示で、順位で一位の表示される時にダンベルと出したいのですが…

No.1の例でしめすと、
H3セルを『=B3』に修正して、下方向にコピペです。
B列を表示したい文字列に修正したら完成です。


人気Q&Aランキング