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 見つからないことが困るか困らないかは仕様と目的による findって対象の値が二つ以上あったらどういう挙動なんだっけ? >>396 最初に見つけたところで検索終了 ただどこまで検索したのかの位置は内部的に記録してあって それ以降のを検索するには FindNextメソッド使って終わりまでループさせる 正直面倒な仕様だと思われ vbaでIEを動かす際、テキストボックスへのfocusが、成功するときと成功しない(で次の処理に移行しエラーが出る)ときがあります 安定させるのに何か方法はないでしょうか? エクセラーってちょっと響きかっこよいですよね ワード… 【1 OSの種類 .】 Windows8.1 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 10シートのうち,「作業用」,「転記用」という名前が入っているシートがいくつかあります。 通常は非表示にしてあり,現在は,担当者が再表示する場合は「校閲」→「ブックの保護」→「パスワード入力」と行っています。 これを,例えば「シートの再表示」というマクロを実行すると, 1.「校閲」→「ブックの保護」→「パスワード入力」 まで自動で進む。 2.パスワードを入力する。 3.「作業用」,「転記用」という名前が入っているシートのみが再表示される。 また,逆に, 例えば「シートの非表示」というマクロを実行すると, 1.「校閲」→「ブックの保護」→「パスワード入力」 まで自動で進む。 2.パスワードを入力する。 3.「作業用」,「転記用」という名前が入っているシートのみが非表示される。 といいう動作にしたいです。 どのように記述したらよいか教えてください。 >>400 エクセラだとインスタントコーヒーになってしまうので、エクセリストが推奨されています >>401 です。追記です。 パスワードなしの場合は,以下のように記述しています。 Sub 転記用シート一括非表示() Dim s As Worksheet For Each s In Worksheets If InStr(s.Name, "転記用") > 0 Then s.Visible = False End If Next s End Sub Sub 転記用シート一括再表示() Dim s As Worksheet For Each s In Worksheets If InStr(s.Name, "転記用") > 0 Then s.Visible = True End If Next s End Sub アドバイスありがとうございました。 とても勉強させて頂きました。 私もいつかは回答者さん側になれるよう精進したいと思います。 A1をリスト入力に設定し、リスト候補をセル範囲指定に している場合で、セル範囲(縦一列に入力)の下部セル にリスト候補を追加入力しただけで、リスト候補として 追加される方法はありますか? >>406 C列に候補を入れているとした場合にデータの入力規則でリスト、 元の値のとこを↓にすれば出来る =OFFSET(C1,0,0,COUNTA(C:C),1) 入力セルがA列、リスト候補の列が別のとこに設けている ようにしています。 新しいリスト候補ができると、都度入力規則を設定し直 しているのを省略したいです。 >>406 リストの範囲を縦一列にしたらそうならんか? 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2016 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 Excelは計算量が多いと途中で計算をやめると聞きましたが、本当ですか?? >>411 ステータスバーに処理のパーセンテージが表示されてる時にEsc押すとキャンセルできる って話? 本当 試しにA:Aに=1+1とか入れてみると良い >413 キャンセルしなくても終わる事はあるよ vba で複数シートを一括印刷する際、A1セルに「××」という文字列があるシートは除外して印刷するような設定ないでしょうか? >>406 追加入力? ちょっと後半の意味わかんない 画像つけてよ 【1 OSの種類 .】 Windows8.1 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 >>383 です。色々と試してうまくいきました!ありがとうございました! 2つ目の試練が出てきました・・・・ A1が1の時、 A3〜M3の範囲で「1であるセル」の下を選ぶ (例えばC3が1なら、C4) という指定は可能なんでしょうか。 418の続きです。 カレンダーの日付で、●日の時のメニューを、別シート(配送表)に反映させたいんです。 カレンダー様式は曜日が固定されていて、月によって●日という位置が変わるんです・・・ 月 火 水 木・・・ 1 2 3 4 もあれば 月 火 水 木・・・ 31 1 2 3 などもあり、 日付と一致するセルの下のメニューを引っ張りたいんですが、式で可能なんでしょうか。 何度もすみませんが、どなたかご教授願います。 ↓だと半分ぐらいが削除されるのですが、なぜか削除されない行もあります。 セルにはスペースも何も入っていないで。 原因と解決方法を教えてください。 Sub Macro2() 'シート名「***」のC列に空欄のセルがあれば、その行を行ごと削除して詰める Sheets("***").Select For r = Cells(Rows.Count, "C").End(xlUp).Row To 2 Step -1 If Cells(r, "C").Value = "" Then Rows(r & ":" & r).Delete End If Next r End Sub >>420 For r = Cells(Rows.Count, "C").End(xlUp).Row To 2 Step -1 If Cells(r, "C").Value = "" Then debug.print r&"行目の中身:"&Cells(r, "C").Value Rows(r & ":" & r).Delete End If Next r って感じでコンソールに出力すると良いよ 他にもF8のステップインって機能がある 一行一行見ていけば、変な行がわかる >>383 ,418 これでどうでしょう。 =IF(A1=1,OFFSET(A3,1,MATCH(1,A3:M3,0)-1),"") =IF(A1=1, ,"") の部分は説明不要ですね。 OFFSET(A3,1,MATCH(1,A3:M3,0)-1)の解説 OFFSET(A3,1,□) で、A3セルを基準に1行下、□列右のセルを指定したことになります。 □はどうやってもとめるか・・MATCH関数の出番です。 MATCH(1,A3:M3,0) で、A3:M3セル範囲(1行×13列)の中から値が1のセルが何番目に あるかを求める関数です。例えば、D3セルが1だったらMATCH関数の値は4になります。 このままではA3セルを基準に1行下4列右のセル=E1セルを指定してしまうことになるので MATCH( )-1 としています。 ただし、A3:M3に一致する値がない場合はエラー #N/A となります。 なお、>>419 を見てみた限り、この方法がいいのかどうかはわかりません。表の全体がもう少し 詳しくわかればいいのですが・・・。 かといって、実際のファイルをアップすることはしないように。 週間カレンダー形式の表は私もいくつか作ったことがあります。 >>419 俺だったら、日付とその日のメニューを 左右2列に並べたシートを作り それを元にカレンダー作るけどね 休業日のシートも作って それもカレンダーに反映させればいいし 万年カレンダーでググればヒントになるの見つかるよ >422 ありがとうございます!自分の知らない関数でした! 確かに、これだといけますね! 範囲を複数にまたがる時ってどうしたらいいんでしょうか? カレンダーなので、行が変わるんです。「A3:M3」だけでなく、 「A10:M10」も みたいなイメージです。 >423 横に書くデータ入力シートを作って、それを反映させるって意味ですね? 入力する素人おばちゃんが、縦と横、目を回さずに間違いなく入力できたら いいんですが・・・一度話してみます! 色々とありがとうございます。 >>424 横じゃなくて縦並び 手帳と同じ 日付,メニュー 2019/8/28,オムライス 2019/8/29,ハンバーグ定食 って感じ カレンダー作る時 日付を“1”で入れるか“2019/9/1”で入れて 書式にd入れるのは見かけ同じで意味が違う 後者の方が応用させやすい 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 少し 【4 VBAでの回答の可否】 不可 あるシートのA5に、=IF(A50>0,"支払済","未") という関数が入っており、それがZ列まであります。 それぞれ、50行目に金額が入っていれば 支払済、なければ 未 と表示されるようになっています。 このA5からZ5に、「値が 支払済 なら背景色変更」という条件付き書式を設定しようとしているのですが、 うまくいきません。 なぜか「値が 未 なら背景色変更」というのはできます。 「支払済」という文字が間違っているとは思えません。「済」という文字のコードに問題が?とか思って 関数も「すみ」に変えてもダメです。「未」だけ判定できる条件付き書式なんてありえるのかと わけがわかりません。 何かアドバイスください。お願いします。 >>427 それって、色を変える書式の条件を A50>0 にすればいいだけのような >>427 支払済を試しに半角英数字に変えてみては? >>427 絶対参照にしてたというオチはないだろうか >>427 条件式に間違いは無いのでは? ただ、それに対応する書式がきちんとしていないとか? >>428 普通はそうだよね。 強いて言えば、A50に"金額"という名前を付ける方が後で修正のときに迷わない。 細かいこというけど、A50が空白かどうかの判定は A50>0,"支払済",“未” じゃなくて ISBLANK(A50),"未","支払済" >>427 結局、支払済と未でそれぞれの背景を何色にしたいねん? それを書かないとなんともなあ。 >>424 簡単に作ってみました。 >>423 さんが書いてるような、入力のためのシートと週間カレンダー形式のシートで構成しています。 両方のシートを画面イメージでアップしました。 https://i.imgur.com/kVRc5G6.png 曜日固定のカレンダーに日付を設定するのは第1週の最後の曜日の日付を求める計算式が要です。 B1セルとC1セルに入れた年と月とI4セルの計算式で求めています。 I4セルの計算式の説明は割愛します。C4:I4、C7:I7、・・・のセルは計算式で日付を出しています。 セルの書式で日付のうちの日部分だけ表示するようにしています。I4セルだけ年月日を出してます。 入力シートから日付をキーとして引用する計算式は、図の下の方のF5のセルの =IFERROR(VLOOKUP(F4,入力!$A$2:$C$50,2,FALSE)&"","") です。 $A$2:$C$50という、49行×3列のセル範囲の先頭列が日付の検索範囲で、2 は該当したら 2列目(B列)のセルを返すようにしています。 項目2の欄であるF6セルの計算式は =IFERROR(VLOOKUP(F4,入力!$A$2:$C$50,3,FALSE)&"","") です。違いはわかりますか? >>427 色変える条件式どう書いたか晒してみ? >>432 それだと数字以外でも支払済みになる >>408 返事が遅くなってしまいましたが、できました! ありがとうございます! 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 勉強中 【4 VBAでの回答の可否】 可 数式や関数がたくさん入っていて非表示になっているシート1があるとします。 VBAで、このシートのコピー(各セルの値はすべて値を貼り付け的な処理をして関数や数式は残さない) を別ファイルとして保存することは可能でしょうか? 可能なのかどうか、また、できればそのコード(長くなるならヒントだけでも)を教えてください。 >>437 可能です。 マクロの記録でもできそう。 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2019 【3 VBAが使えるか .】 可 【4 VBAでの回答の可否】 可 特に質問はないので、一応テンプレだけ。 >>437 特殊な処理無いし書いてることそのまんまやるだけ >>437 ようは、マクロの記録でも出来る そのマクロコードでオブジェクトやプロパティの意味を知りたければドラッグしてF1押せばマイクロソフトのサイトで解説してくれる >434 ありがとうございます! まだパッと見てもわからないので(笑) 少し夜考えてから質問させてください! 写真まで丁寧にありがとうございます(^◇^) >434 何分か見比べてみました。何となくわかります!(笑) 画像つきで丁寧に教えていただきありがとうございます(^^) VLOOKUP関数なるものは、検索してわかりました。(IFERRORも) これを使うには、入力シートが、横に項目1・2と続く場合に 拾うというものですよね。縦のものを拾う関数は存在しないんでしょうか。 お弁当屋さんなんですが、結構デザートまで入れると6種目あって、 メニューの品名も長くて。縦に項目1・項目2として、それを反映する関数だと 一番入力する人間もわかりやすいのかなって思ってしまい・・・ でも、これが一番よいのかも!? >>443 一応、HLOOKUPというものもある 今年後半からXLOOKUPというのも出るそうだ VLOOKUPよりindex+matchの方が使い勝手良いから使ってきたけどXLOOKUPの方が楽かもしれない >>443 まさか”メニュー”という言葉が出てくるとは! 自分は現在、福祉NPOに関わってて、ボランティアでパソコン関係の支援をしてます。 NPOの調理部門のメニュー表作成で以前作ったもののイメージをアップしたので参考にしてください。 https://i.imgur.com/rtRqHo9.png 左側のシートは”DB”シートです。同じ日付で4行あるのは、朝・昼・夕・おやつ の4種類のためです。 VLOOKUPの対象となるのはC列〜I列です。 出力側シートのC11セルの計算式が見えてますが、おもしろいことに「昼食」の欄(C9:C13)の計算式は 全て同一です。計算式中の ROW()-7 の部分で自動的に引用する列をずらしているからです。 C11セルなので ROW()-7 の結果は 11-7=4 → VLOOKUPの対象となるのはC列〜I列なので 4列目にあたるF列の値が引用されます。 vlookup をdisってようやくExcel上級者として認められる >>446 vlookupをindexとmatchで置き換えるのは中級レベル LOOKUPだと縦でも横でもいけるんじゃなかったっけ? INDIRECTとMATCHが好きだけど vlookup 初級者 indexとmatchで 初級者+ vlookupmatch 中級者 実務で間違いが起こらないように数式を組み立てる事が出来る、これが一番大事 技術が幾ら凄くても間違ってたら駄目なんだ 実務では無駄に凝った数式作って後でメンテする人に迷惑かけない事が大事 >>453 しかし自分が使うとなると実装したくなる病気が発病するよね〜 楽したい〜 分かるマン なんなら誰かが見つけて称賛されたいマン I列にゼロがあれば、そのセルをクリアにするようにしたいのですが For Each c In Range("I:I") If c <= 0 Then c.Clear End If Next c これだと結構時間がかかります。 早くするコードをおしえてください >>456 範囲の値を配列に入れてそれを処理したあとまた範囲に戻す >>456 オートフィルタかけたらいかんの? range("a:i").autofilter field:=9,criteria1:="<=0" range("i:i").clear range("a:i").autofilter それか、「0を含む」ではなく「0固定」なら置換使った方が楽で速いんじゃね >>456 Sub Macro1() 列 = 9 最終行 = Cells(Rows.Count, 列).End(xlUp).Row For i = 1 To 最終行 If Cells(i, 列) = 0 Then Cells(i, 列).Clear End If Next End Sub >>457-459 お、お前等 シートの最終行まで見てる事が遅い原因だぞ >>460 いや、Rangeを使ってるのが原因 Rangeは遅いから大量セルを弄るのに使うのは向かない Excelの機能でできることはExcelの機能で実現しないと遅くなるよな 大量のセルを扱う時はRangeじゃなくて配列で処理したら一瞬だよ 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 あいうえおおおかき(abcd)くけこさ(efef)しすせそた(gggg)ちつてと 上のようなパターンの文字列がありまして、いくつか(多くて5つくらい)のカッコで囲まれた文字列を除く計算式が知りたいです 結果こうなりたい あいうえおおおかきくけこさしすせそたちつてと 置換Ctrl-Hじゃなくて計算式でよろしくおねがいします。 >>401 >>404 ですが,いかがなものでしょうか? >>465 =substitute(a1,"あ","") みたいな感じで >>466 難c >>465 ユーザー定義関数使っていいなら出来るが VBA否だからなあ VBA実行ファイルと同じフォルダ内に複数のCSVファイルがあり、そのCSVの各ファイルのA〜Gの2行目以降を コピーしてVBAを実行するBookの“日報”と言うシートに張付けて、行を累積していくコードを教えてください。 それぞれのCSVファイルの最終行はA行の最後です。 >>471 何かの試験問題か? >A行って何? A~G言うから、これ列指定かと思ったら行と来たもんだ? そもそも、どういう構造のCSVやねん? 複数のシート間で対応するセル同士を相互リンクするのって関数じゃ無理ですか? どちらで更新しても全てに反映されるような >>472 すみません。A列でした それぞれのCSVファイルはA列〜G列に文字が記入してあります。 >>471 そのCSVはExcelで開いても書式が崩れないやつ?001が1になったりとか >>471 CSVファイルの指定はどうやって行うの? ダイヤログ?.csv全部?あと順番は? フォルダへのCSVファイルの移動(またはコピー)は手動?重複チェックは必要? んなツール自体の仕様みたいな部分は本人があとから好きに付ければいい部分じゃね >>471 あと、素朴な疑問だけど、日報もCSVじゃダメなの?日報がCSVでよければコードは超簡単になるんだけど >>473 相互参照の必要性が全く無い それが出来ないと不便なことがあるのか? >>465 です 普通の関数だけではできないんですね ユーザー定義関数ならできそうですか よろしくお願いします >>481 Range(置換する範囲).Replace "(*)","" >>477 ・フォルダ内のCSV全てです ・CSVファイルは手動でフォルダに入れます ・重複チェックは必要ありません ・順番は不順です >>483 処理速度は考慮してない -------------------- Const PATH = "フォルダパス\" Dim cnt As Long Dim fname As String Dim buf As string cnt = Cells(Rows.Count, 1).End(xlUp).Row fname = Dir(PATH & "*.csv") Do While fname <> "" Open PATH & fname For Input As #1 Line Input #1, buf '※ Do Until EOF(1) Line Input #1, buf If Split(buf, ",")(1) = "" Then Exit Do cnt = cnt + 1 Range(Cells(cnt, "A"),Cells(cnt, "G")).Value = Split(buf, ",") Loop Close #1 fname = Dir() Loop End Sub -------------------- ※は1行目が必ずある前提。無いなら別の処理がいる 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2007 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 列 A B 1 3 2 1 3 5 4 2 5 4 列Aと列Bを比べて3と5は2つ順位が上がったとして 列Aより列Bの数字が2つ以上順位が上がった事を見つける数式 また該当数字のセル色を変える方法はありますか? よろしくお願いします >>481 作業列5列ぐらい使ったらできると思うよ >>485 同じ行同士比較するんであれば、条件付き書式(数式利用)で、作業列使わずにできますよ。 1行目からデータがあるのであれば、A1:A5(実際にはデータがあるところまで)のセル範囲を選択しておいて ア リボン → ホーム → 条件付き書式 → 新しいルール → 数式を使用して、書式設定するセルを決定 イ 数式を入れる欄に =A1<=B1-2 と入力 ウ [書式]ボタンをクリック エ 塗りつぶしのタブをクリック → 塗りつぶす色を指定 → [OK]をクリック オ [OK]をクリック A列の値 <= B列の値から2を引いた数字 が成り立てば「2以上順位が上がった」としています。 A列の値にゼロがありうる場合は、 =AND(A1>0,A1<=B1-2) でいいかも(試してません) >>487 ありがとございます チャレンジしてみます このソフトを快適に動かせるPCのスペックってどこを重視すればいいんでしょうか? IEとかも動作させたりするせいか 結構重いのです >>489 メモリー CPUは基本的に食わない。VBA使ってて消費量が多ければコードを見直す方がいい Excel+IEは ・CPU 2コア4スレッド以上 ・メモリ 12GB〜 あればほぼ大丈夫 8GBだとたまにスワッピング起こって重くなる感じ https://moripro.net/vbaie-gethtml/ こちら検索して出てきたもので、これをそのまま使って起動済み画面のHTMLを取得しています しかし、目的の画面のHTMLを読み込んだ後、処理@〜B(リンクをクリックする、テキストボックスに記入するなど)を入れると、 Aを飛ばして@Bと遷移するときと@~Bとうまく遷移することがあります この違いはなんでしょうか?回避方法ありませんか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる