Excel総合相談所 136
■ このスレッドは過去ログ倉庫に格納されています
【1 OSの種類 .】 Windows** 【2 Excelのバージョン 】 Excel** 【3 VBAが使えるか .】 はい・いいえ 【4 VBAでの回答の可否】 可・否 ▼━関連スレ━━━━━━━━━━━━ 前スレ Excel総合相談所 https://find.5ch.net/search?q=excel Excel VBA 質問スレ https://find.5ch.net/search?q=excel+vba 【質問不可】Excel総合相談所スレの雑談・議論スレ https://find.5ch.net/search?q=excel+%E3%80%80%E7%9B%B8%E8%AB%87%E6%89%80 >>210 置換じゃダメで関数じゃないとダメだから聞いておるのだ >>212 そうなのだ これでいいのだ バカボンのパパなのだ なんでそんなにExcelの関数やらVBAが出てくるの?エンジニアなの? 手作業でもできることを自動化したい時はマクロの記録をするんだ マクロの記録なんて実務で使ってる人見たことないな。 >>198 何か VBA で IE を操作する 本の一冊でも買っていますか? 一冊買ってしまったほうが早いですよ 本は悪手だと思う サイトに書かれてるのですら最新のIEでは動作しなかったりする 最近勉強し始めた人は複数のサイト調べて自分なりにカスタマイズ出来るようでないとIE操作系は難しいと思うよ あ、 確かにネットのは動かないことも多いです。 原因のひとつが 大抵 バージョンとかも書いていないこと IEのバージョンも参照設定も書かれてないことが多いね 参照設定次第でコード変わるから同じ事やっててもサイトによって書いてるコードが違う コードは長くなるけどバージョンが違っても参照設定しなくても動くように書く方法もあるんで、あとは書く人の能力とか方針次第なんだよなあ 参考書なら個人の方針とか関係なくどう書かれたコードかという説明は書くべきじゃないかな >219 バリバリ使ってるぞ ctrl+↑とかctrl+end、行列の削除辺りは割とよく使う 一つのプロシージャ内で複数のcallを記載する場合、変数の重複はカウントされますか? >変数の重複はカウントされますか? ちょっと良く分からないですが、同じ名前の変数が混ざるかどうかって話しなら スコープ、ローカル変数、グローバル変数で検索してみて下さい >>229 例えば sub hoge() call 1 call 2 end sub で、call1.2の中に同じ変数宣言がある場合、その変数宣言は1で一旦解放されますか? それとも解放されない=変数重複のエラーが出ますか? >>230 宣言を解放するの意味が分からない 変数にnothing入れて解放しても宣言が重複するとエラーになる 無理に分からない単語を使わない方が良い ってか、試したほうが早いと思うけどエラーにはならない ちなみにstaticだと変数の中身は継続するけど関係ないかな Sub foo() For i = 1 To 10 Call a Call b Next End Sub Static Sub a() Dim ax Dim bx ax = ax + 1 Debug.Print ax End Sub Sub b() Dim ax Dim bx bx = bx + 1 Debug.Print bx End Sub >>230 プロシージャ内で宣言した変数はプロシージャ内だけのものなので被ってても関係ない 変数がstaticな場合初期化はされないが名前被りとは無関係 >>145 遅レスでたいへんスマン 見てるのはchrome? sourceの中見てみたけど114行目に該当するところにアドレス全店仕込まれてるのが分からず もう少し詳しくどこを見るか教えてくれるとありがたい >>234 たぶん>>145 は早合点してると思われる 114行目のjsonに含まれるURLはショップのリストではない こういう動的なサイトからデータを抜き出すには、パケットを解析してWeb APIを調べるぐらいしかないと思う 勝手なWeb API呼び出しが禁止されててデータの取り出しが絶対的に不可能なケースってのは、今のところあんまりないと思う このあたりの話になるとExcelは関係なくなってくるし、VBAを使わないと難しいことも多いんで、あきらめるか方針を変えて貰うしかない >>235 だよね、いくら見てもないはずだw たしかにもうexcelの範疇じゃないな かといってvbaでないと、というものでもないから範囲広げて考えてみるわ サンキューでした >>227 そういやあれ何だろな。 Cells(1, Rows.Count).End(xlUp).Rowって、最終行特定のテンプレみたいになってるけど、 フィルタ掛かってると使えないし、UsedRenge〜を使う応用編だと検索設定変わっちゃうし、 何かまともな方法無いんかな。 しょうがないから、俺、ADOのレコード件数で判定してるわ。 >>237 その方法でも途中に空白あったら使えなくない? ループで1行ずつ見るのは時間がかかるし、一時的にフィルター解除するかなあ VBA初心者でこれから勉強を頑張りたいと思っているものですが、初心者で取っつきやすい書籍を数冊教えて欲しいです。今はExcelVBAのツボとコツがゼッタイわかる本の超入門とプログラミング実践編の2冊を読んで実際にVBEに入力してみた感じです。よろしくお願いします。 あとExcelVBAふりがなプログラミングとたった1秒で仕事が片付くExcel自動化の教科書の2冊も読みました。これから先の勉強法なども教えていただけると嬉しいです。 >>240 それだけ読めば十分初心者じゃなくなってると思う VBAの機能を何もかも全部覚えるのは不可能だから、あとはVBAでやりたい仕事ができたら、目的に応じてネット検索すればいい >>241 ありがとうございます。 4冊を読んで『たった1秒。。。』は少し難しかったですが、後の3冊は特にわからないような箇所はなかったです。けど自分がイメージしているマクロをすぐに書けと言われても間違いなく書けません。 これからは書きたいマクロをExcel上でどの様な動きをするか箇条書きにして、それをネット、マクロの辞書などを頼りにして書いていくというやり方でいいでしょうか? そんな丸ごと3冊も本理解してるなら十分1人でできるんでは 参考書を読みながら実際に動かして試してみることが大事 読むだけでは無理 >>234 これショップのリストにしか見えないけど間違っていたのか https://i.imgur.com/xBVseYa.png >>237 そうか、入力と出力は絶対に分けるから気づかなかった フィルタ掛けてると狂うのかこれ >>242 イメージするのはブックやシートの最終形だ。途中は変な事していなければベタ書きで良い コードなんてずっと書いてればこなれてくる。vba質問スレかこのスレの過去ログ読んで、実戦形式で取り組んで見ると良い 質問に答えてくれた方々ありがとうございます。 地道にExcel上での動きを書き出して、それを一つ一つコードで書いてドッキングするという作業に徹したいと思います。確かに本を読むだけじゃなくて実際にコードを書かないと力はつきそうにないですね。先は長そうですが。。。 ありがとうございました! 【1 OSの種類 .】 Windows7、10 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 A1に数値を入力してB1に任意のコメントを表示させる方法を教えてください A1に入力した値が25〜75ならB1にOK A1に入力した値が26〜30、76〜80ならB1に注意 A1に入力した値が30未満、80より大きいならB1にNG と表示させたいです >>248 B1=IF(AND(A1>=25,A1<=75),"ok","") &IF(AND(A1>=26,A1<=30),"注意","") &IF(AND(A1>=80),"NG","") &IF(AND(A1<=30),"NG","") 27だとok注意ngとなったけどまぁええか 優先順位が良く分からん >>248 26や27は「25〜75」「26〜30」「30未満」の全部の条件に当てはまるけど、どうすんの? 間違えました 規格 50±30 ACT 50±25 になります A1に数値を入力してB1に任意のコメントを表示させる方法を教えてください A1に入力した値が25以上〜75以下ならB1にOK A1に入力した値が25未満〜20以上、75より大きい〜80以下ならB1に注意 A1に入力した値が20未満、80より大きいならB1にNG と表示させたいです >>251 規格とかactの行は読み飛ばすとして B1=IF(AND(A1>=25,A1<=75),"ok","") &IF(AND(A1>=20,A1<25),"注意","") &IF(AND(A1>75,A1<=80),"注意","") &IF(AND(A1>80),"NG","") &IF(AND(A1<20),"NG","") >>238 上から下じゃなくて、下から上なら大丈夫、という話じゃなくて? >>252 ありがとうございます IF関数の重ねがけ?がいまいち分らなかったので助かりました >>253 2016以降だとIFS関数というのも使えるんですね Win7のサポート切れに伴うPCの入れ替え時にVDI化するらしいですが、 その際にエクセルも2016以降になるかと思います もっと勉強して自分で出来るようにしていきたいです 【1 OSの種類 .】 Window10 【2 Excelのバージョン 】 Excel2019 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 以下のコードは"あ","い","う","え","お" の5チームの総当たりのリーグ戦を示したものです。書籍からですのでところどころは変えてあります。(変数名など) このコードを解読しようとしているのですが、どうしてもわかりません。お分かりになる方教えてください。よろしくお願い致します。 Sub リーグ戦 () Dim チーム,チーム1.チーム2.i チーム=Array("あ","い","う","え","お") チーム2=1 For Each チーム1 In チーム For i =チーム2 To 4 Debug.Print チーム1 & "vs" & チーム(i) Next チーム2 = チーム2 + 1 Next End Sub >>256 どの部分がどうわからないか書いてないぞ >>256 入力ミスがあったから直した Sub リーグ戦() Dim チーム, チーム1, チーム2, i チーム = Array("あ", "い", "う", "え", "お") チーム2 = 1 For Each チーム1 In チーム For i = チーム2 To 4 Debug.Print チーム1 & "vs" & チーム(i) Next チーム2 = チーム2 + 1 Next End Sub >>256 総当たりなので、2重ループでチーム名をすべて書き出してるだけ ただし、外側のループはEachを使って全チーム 内側のループは重複する組み合わせを除くためにループの初期値を順番にずらしている http://imgur.com/ikCmwOS.png >>245 あー単にソースコード見てたのか たしかに114行目にストアリストはある ただ100件しか表示されないんだよな… てことでスレチだし終わりにするわ 皆様ありがとう。どこがわからないか整理するわ。 ぶっちゃけてどうわからないかもよくわからない。。。 上から順に読んでいって何行目で詰まったかじゃないんか 何なら分かるか(if文なら分かるとかArrayは分かるとかfor文は分かるとか)が分かれば教えようもあるけど全て分からないなら1行ごとの意味を調べた方が良いと思う ロジックが分からないなら>>259 の通り For のコードが二個あるじゃないですか? それは分解して考えた方がいいですよね?すいません、的外れな質問で。。。 >>266 なるほど、内側からですね。少しねばって見てみます。 てか、コード読めないならいきなりバラバラに考えずまず1行ずつ追っていって何が行われてるか見ないと意味がわからないんじゃないのか >>265 >>259 の表を例にとると縦軸のforと横軸のfor 縦軸はArrayに格納されてるあ、い、う、え、お を順番に回す 横軸はArrayに格納されてる2〜4番目を回す ただ、チーム1が「あ」の時は2〜4番目を回すけど、「い」の時も2〜4番目を回すと いvsい が出来てしまうので チーム1が「い」の時は3〜4番目を回したい なので開始の番目を3にする為にチーム2+1をしてる forだって順に追っていけば自然と内側から理解していくことになるはずだ みなさんありがとうございます。明日にまたレス頂いた文章を参考に考えます。今日はちょっと自分の中で答えが出そうにないです。それにしてもVBAは奥が深いです。プログラミングを全くしたことない人間はキツイのかなって思いますね。。。 for each と普通のforを混在させているのは学習用の教材のため? 学習用にしてはあまりよい例とは思えない。 実用的にはfor eachを使わずに普通のforで統一したほうが構造が理解しやすい Each in使う時はシート回したい時くらいしか使わないわ SplitとかArrayみたいな配列を返す関数を使った時は、配列の範囲をいちいちLBoundとUBoundで調べるのが面倒だからEachで回すけどなあ 慣れるとすごく便利だよ split関数って普通のexcel365にはないんだよね? vbaかスプレッドシートのみか このスレの中でスクールなどに通わないで、書籍、ネットのみでVBAを使いこなせるようになった方々の勉強法、またどれくらいの期間勉強しているかなど教えてもらえると嬉しいです。私は上記の本を4冊読んだだけの完全なるど素人です。 >>282 始めたのは中学の時、最初は友達と一緒にベーマガとか読みながら勉強して、学校の先生や先輩にも色々教えて貰った 高校に入ってからはプログラムを作るバイトを紹介してもらって、仕事しながら覚えた感じ チーム って単語ずっと見てたら変な言葉に思えてきた for i〜は定数や順序が必要な場合かな 特に特定の条件で行削除などはstep-1が必要になるのでforeachで処理しないほうが良い。見辛い >>256 の場合は両方foeachでいいぞ Sub リーグ戦() Dim チーム, チーム1, チーム2, i チーム = Array("あ", "い", "う", "え", "お") For Each チーム1 In チーム For Each チーム2 In チーム If チーム1 <> チーム2 Then Debug.Print チーム1 & "vs" & チーム2 Next Next End Sub >>282 必要になるたび随時調べて使ってたら覚えた VBAに限らず本読んだだけで技術を身に付けるなんて一般人には無理だぞ 4冊読むだけより1冊実際に動かして何か作りながら読む方が圧倒的に身に付く https://i.imgur.com/FgTjXv5.jpg 数式で可能ですが項目1(A列)のように入力したいです。 項目2(b列)にはすでに値が入力されています。 100 1 2 スペース 101 1 2 3 スペース これを隣の列に 100-100 100-1 100-2 101-101 101-1 101-2 101-3 と入力したいです。 数式でなおかつオートフィルが条件。 数式で可能ですがって言うからVBAがいいのかと思ったらやっぱり数式がいいのか? >>291 なんだ、せっかく作ったのに >>291 教えてる奴に対して「ガイジ」ってマジモンだな 返信をしていただいた方ありがとうございました。 今日も今からは答えが出そうにないです。 明日以降に考えたいと思います。 ありがとうございました。 >>296 >>256 のコードは間違っている。そんなもん考える必要はない 正解は>>286 >>296 間違っているわけではなかったわ。 ただ、慣れてない人が書いた無駄の多いコードなので読みにくくて当然 慣れない内からこんなものを参考にするもんじゃない >>299 答えといいますか、コードを読み解くことです。 今日は暑気払いで体調を崩したのでまた明日以降に考えたいと思います。 コードを読み解くって具体的にどういうことを言っているんだろうな やってることがよくわからんなぁ… >>286 は間違ってる 「あvsい」と「いvsあ」はどちらか片方だけにしたいんだよ >>298 だけど、ごめん俺が間違えてた >>256 で良い vbaはpushとか無いから超めんどい書き方にするしかない この場合はFor Eachなんか使わない方が分かりやすいって という僕が通りますよ Sub リーグ戦2() Dim チーム, i1, i2, i2初期値 チーム = Array("あ", "い", "う", "え", "お") i2初期値 = 1 For i1 = 0 To 4 For i2 = i2初期値 To 4 Debug.Print チーム(i1) & "vs" & チーム(i2) Next i2初期値 = i2初期値 + 1 Next End Sub 実用じゃなくてForの説明のための例文だからじゃね? >>306 配列の範囲を決め打ちするなら、こう書けば変数が一つ減らせる For i1 = 0 To 3 For i2 = i1 + 1 To 4 そのうちほのぴが石田ばりにシャウトしてくれることを夢見てるよ 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel365 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 やりたいことはハイパーリンクからchromeを開いてhtml取得して保存してchromeは閉じるというループ処理 【詳細】 excelシートA列にあるハイパーリンクをchromeで開く 開いたWebサイト上で右クリックのソースコードを表示させ、htmlを取得しテキストまたはexcelシートに貼り付け保存 chromeを閉じる (htmlの保存はできれば開いている同じexcelファイルにシートを増やしていきたい) もし該当しないurlの場合は次のハイパーリンクを開くエラー回避処理も入れたい この動作をA列にあるハイパーリンク全部に対してループ処理したい chromeだと厄介であればIEを使うことも検討してます よろしくお願いします >>310 とりあえず スクレイピング vba とかで検索してみては? まるなげすぎてさすがに面倒 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる