質問: いつもお世話になっております。 VBAについて、行いたい処理に対してどのようなコードを作成すれば良いかわからず困っている為教えてください。 エクセルバージョンは2010です。 下記は1ファイルでの例をもとに説明させて頂いており、実際にはファイルごとに行数・列数が異なることを前提にコードを作成したいと考えております。 ■状況 ・1行目には"やさい""肉""魚"など文字列が複数列入力されています ・2行目以降には値が入力されています ※ファイルによって最終列・最終行は異なります ■行いたい処理 11行目の文字列"やさい"を検索 21行目の文字列"肉"を検索 32行目から最終行まで順に以下の条件に合わせて最終列+1列目の同行に処理を行いたいです ・条件 "やさい"列の値が140.020以下の場合 かつ"肉"の値が36.584~36.578の場合 最終列+1列目に1と入力 かつ"肉"の値が36.576以下の場合2と入力 かつ"肉"の値が36.584以上の場合4と入力 "やさい"列の値が140.021以上の場合 かつ"肉"の値が36.580~36.586の場合最終列+1列目に3と入力 かつ"肉"の値が36.580以下の場合2と入力 かつ"肉"の値が36.586以上の場合4と入力 説明がわかりずらく申し訳ありません。 お忙しいところ恐縮ですが、ご教授頂ければ幸いです。 宜しくお願い致します。
回答: >かつ"肉"の値が36.584~36.578の場合・・・ >かつ"肉"の値が36.576以下の場合・・・ 36.577だとどうなるんですかね? Sub sample() Const cY As String = "やさい" Const cN As String = "肉" Const cFormula As String = _ "=IF(@2<=140.02,IF(#2<36.576,2,IF(#2>36.584,4,1)),IF(#2<36.58,2,IF(#2>36.586,4,3)))" Dim APP, xCY, xCN, xLC As Long, xLR As Long Set APP = Application xCY = Split(Columns(APP.Match(cY, Rows(1), 0)).Address(0, 0), ":")(0) xCN = Split(Columns(APP.Match(cN, Rows(1), 0)).Address(0, 0), ":")(0) xLC = Cells(1, Columns.Count).End(xlToLeft).Column + 1 xLR = Cells(Rows.Count, xCY).End(xlUp).Row With Range(Cells(2, xLC), Cells(xLR, xLC)) .Formula = Replace(Replace(cFormula, "@", xCY), "#", xCN) .value = .value End With End Sub