Sub コマンドボタン111修正_Click()
With Worksheets("111 (2)")
.Sort.SortFields.Add _
Key:=Range("AS2"), _
SortOn:=xlSortOnValues, _
Order:=xlAscending, _
DataOption:=xlSortNormal
.Range("A1").AutoFilter Field:=32, Criteria1:=">200"
.Range("A1").AutoFilter Field:=36, Criteria1:="0"
このようにして抽出したデータ(64列、約1000行)で、AF列の単価を別シート(単価表)参照(住所M列に対応した単価)で変換(関数式だと、=VLOOKUP((LEFT(M2,3)),単価表!$A$2:$B$71,2,FALSE)し、AN列の金額を条件式(AS<=10の場合、AE*AFで、AS>10の場合、AS*AF)により求めます。そして、AU=SUM(AN:AR)で合計金額を求めて、最後にオートフィルタを解除します。
上記のコードもそうですが、文章の部分のコードをどのように書いたらよいでしょうか。AF列、AN列、AU列の操作は、先頭セルに数式を代入してそのセルを以降のセルにコピーするのか、それとも先頭から最後のセルまで一度に数式を代入できるようにできるのかコードがあるのかがわかりません。
元データは、あるシステムからCSV形式でダウンロードしたデータですので、数式などははいっていなく、文字と数値になります。
面倒なお願いですが、どなたかお知恵をお貸しいただけませんでしょうか。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です。
補足の
1.最終行のセルは、対象列の最下セルからEnd(xlUp)で求めるのが一般的です。
それでは求められない事情でもあるのでしょうか?
2.本来ならそのようなデータを比較するのは危険なので、データの扱いそのものを改善した方が良さそうに思います。(都道府県コードを採用するなど)
住所の記述がキッチリしている保証があって、必ず都道府県の名が先頭に書かれていると仮定しても良いのなら、先頭から都|道|府|県の文字を検索すればいずれかが4文字目までにヒットするはずなので、そこまでを参照すれば都道府県名が取得できるものと思います。
このようなルールでは識別できないような記述法がとられている場合は、状況に応じて当てはめられる別のルールを考えるしかありませんが、いつまでもそのようなことをしておらずに、最初にのべましたように確実な方法に切り替えた方が良さそうに思います。
>、東京23区とそれ以外の区別がつきません。
VBAで処理するのでしょうから、東京だけ特別扱いにして、区に関しては二段階目で検索すれば宜しいかと。
検索の別法として、「都道府県」の代わりに、「区都道府県」で走査すれば二段階に分けなくても、全く同じ方法でできそうな気もします。
(事前に、都道府県名及び市区町村名等で「区」の文字を有するものの有無を確認しておく必要がありますが)
このような場合には、検索値が個別の値となって一律ではなくなるため、まとめて同じ関数を設定するのは難しいかも知れません。
1行ずつループして設定するか、あるいは、関数を一律にするために、「検索値」を返すユーザ関数を別に作成しておいて、今回設定する関数内では検索値の代わりに、そのユーザ関数をを呼び出すようにしておけば、全体を一律の関数として設定することもできるようになります。
とはいえ、ここまでいろいろとVBAで処理するのであれば、(No1の最後で触れましたが)関数等を設定するのではなく、残りの検索処理もVBA全部で行ってしまって、結果をセル値として与える方式にしてしまった方が、考え方として簡明になるかも知れませんね。
ありがとうございます。
おしゃられるように、すべてVBAにして値だけを返すようにできると最高ですが、ひとまず形になりました。
また、勉強さえせて下さい。
No.1
- 回答日時:
こんにちは
セルの位置関係等は確認していませんけれど・・・
>文章の部分のコードをどのように書いたらよいでしょうか。
セルに関数式を設定なさりたいものと解釈しました。
例えばAF列に式を設定するものとして、
Range("AF2:AF1000").Formula = "=VLOOKUP((LEFT(M2,3)),単価表!$A$2:$B$71,2,FALSE)"
(セル範囲は必要な範囲になるように調整のこと)
のような要領で処理すれば、右辺の文字列に相当する式が設定されます。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
その際に、フィルターで非表示のセルには設定されません。
基本的には上記の繰り返しで、ご質問の内容は実現できるのではないでしょうか?
全く別の方法として、関数によらずにVBAで術得tの計算処理を行うという方法も考えられると思いますが、関数を設定する方法よりも少し面倒な内容になることが予想されます。
ありがとうございます。
ただ、問題がありまして、
1.行数が変更になるので、最終行のセルを取得できるようにしたいです。
2.VLOOKUPですが、検索値が住所で、参照先(単価表)の住所は都道府県名と東京都○○区にしてあります。LEFTで先頭の3文字だと神奈川県などがエラーで、東京23区とそれ以外の区別がつきません。文字数を増やすと大阪府などがエラーになります。この関数は、どのように書けばよいでしょうか。
何卒、ご教授ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゼロを表示
-
Excelの計算が合いません。 諸...
-
今まで文字化けなく開けていたc...
-
Excelの警告について
-
ExcelでASCを使って全角を半角...
-
スプレッドシートで指定された...
-
作成した数式を値として表示し...
-
EXCELの散布図で日付が1900年に...
-
Excel関数について教えてくださ...
-
Excel関数について教えてくださ...
-
マクロの処理が遅くなった
-
エクセルを使用して、円周率を...
-
エクセルでファイルの最終更新...
-
エクセルのセル内に分数などの...
-
条件付き書式設定で罫線を引き...
-
シートの情報を別のシートへま...
-
【マクロ】フォルダ内にあるPDF...
-
エクセルで曜日を入れたい
-
Microsoft 365Excelの見開きペ...
-
Excelで時間の計算の方法 7時45...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報