いつも、大変お世話になっております。
vbaの記述で配列関数の部分が分からず投稿させていただきました。ご指導お願いいたします。
ご迷惑をおかけしないように、注意を払っておりますが、不行き等ございましたら、ご容赦ください。
具体的なコードと致しましては、下記です。
With ThisWorkbook.Worksheets("chart").Range("C4").Resize(myrows, 200)
.Formula = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
End With
式を埋め込んで、一つ一つのセルを選択して「ctrl+shift+enter」ボタンを押せば、いいのですが手間なので、
自動的に一括して「ctrl+shift+enter」ボタンを押してもらえるような記述内容の変更の仕方をご指導いただけないでしょうか
当方、excel2000を使用しています。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
とりあえず確実に簡単にできる方法としては,次のようなマクロにします。
with thisworkbook.worksheets("chart")
.range("C4").formulaarray = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
.range("C4").copy destination:=.range("D4").resize(1, 199)
.range("C4").resize(1,200).copy destination:=.range("C5").resize(myrows-1, 200)
end with
マクロ以前にエクセル画面で,どうやってその式を使うかと言えば
1.C4セルに数式を記入してCtrl+Shift+Enterで入力する
2.右に下にコピー貼り付ける
という手順を行います。
上述は,この「出来る手順」をそのままマクロに仕立てたものです。
先に範囲を選択してその式を記入し,Ctrl+Shift+Enterしても,意図した計算結果は得られません。
つまり
セル範囲まとめて.formulaarray = "=今の配列数式"
というマクロを書いても,上手く行かないということです。
ありがとうございました。
同じセルにコピーの行き先(destination)を指定できればいいのに、と思いましたが。
やりたいことはできました。
ありがとうございました。
No.2
- 回答日時:
ここの質問コーナーに答えている程度では、VBAで配列数式を問題にする例は無かった。
VBAでやるなら個々のセルをプログラムを組んで処理する、別の方法があるものだ。そちらを使うのが筋だろう。
配列数式の関数式をセルに埋め込むなど邪道だろう。
関数式だってVBAでセルに埋め込もうとは思わない。
出来るとしても、凝った方法を使いすぎだと思う。質問者はそこまでVBAの熟練者なのか。
他の方法ではできないのか。
ーー
配列数式を離れて、やりたいことをデータ例をあげて、説明してみたらどうすか。
読者に数式を読み解かせ、Resizeしてみたりして、なにをやりたいか意味がわかりにくい。
>式を埋め込んで、一つ一つのセルを選択して「ctrl+shift+enter」ボタンを押せば、いいのですが手間なので、
なぜそうなるのか情況を説明してないのでは。?
MINならMINを求めるセルだけで良いのでは。
ーーー
例えば、先日のわたしの回答例だが
A2:C9の名前を「あ1」とつけた場合
Sub test01()
Worksheets("Sheet2").Range("a2:C9").FormulaArray = "=あ1"
End Sub
は、コピーと同じで
Sub test02()
Worksheets("Sheet1").Range("a2").CurrentRegion.Copy Worksheets("Sheet2").Range("a2")
End Sub
出できると思う。
ーー
よくある条件付き加算の場合
例データ
A2:B10
a1
b2
c3
d4
a5
d6
c7
a8
s9
で、aの行のB列を足すのは、配列数式操作は 例えばC12セルに、=SUM(IF(A2:A10="a",B2:B10,0)) と入れて Shift+CTRL+ENTERで14になるが、
例えばD12にVBAでセットする場合は
Sub test03()
Range("D12").FormulaArray = "=SUM(IF(A2:A10=""a"",B2:B10,0))"
End Sub
の実行で出来た。
こういうのは参考になるかな?
質問の場合はどううまく行かないのか。
No.1
- 回答日時:
.Formula = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
↓
.FormulaArray = "=MIN(IF((作業NO=$A4)*(C$1<=作業日)*(作業日<=C$1+6),NO))"
ということとは違いますか。
解答ありがとうございます。私の説明不足で、申し訳ございません。
ご教授いただいた記述(.FormulaArray)ですと、resizeしたほかのセルも全て同じ値(絶対参照)になってしまいます。
これを、解消するためには、Formula で式を埋め込むしかないと思うのですが、その後で、まとめて 各セルに「ctrl+shift+enter」ボタンをおすなんて、記述ができればと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タイムスタンプとテキストから...
-
エクセルの文字が途中から消える
-
エクセルの質問です。 F列からL...
-
ワークシートに出現したこの画...
-
Excelの警告について
-
EXCELの散布図で日付が1900年に...
-
エクセルでファイルの最終更新...
-
Excelでの文字色
-
マクロの処理が遅くなった
-
シートの情報を別のシートへま...
-
OFFSET関数を使用したいのです...
-
エクセルの数式バーのフォント...
-
エクセルデーターから必要な項...
-
Excelについて教えてください。...
-
SUBTOTALは、参照された数字で...
-
エクセルの「条件付き書式」を...
-
Excelの関数について このよう...
-
エクセル。金額から「円」を除...
-
Excelの数字の前に入っている空...
-
エクセルの問題です。絶対値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報