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 >>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とうまく遷移することがあります この違いはなんでしょうか?回避方法ありませんか? 380で質問した者です。 質問に対し、フィルタオプションを使用してみては? とご回答くださり、その場は対応できたのですが、質問に大事な事を書き忘れました。 売上表は複数シートからの抽出された、昇順並び替えをしている可変データになります。 そのため、フィルタオプションだと、データが変わるとフィルタオプションでは 設定した時の抽出状態なので、やはり式の修正が良いのではと思っています。 再度質問して申し訳ありませんが、式の修正で良い方法があったらご教示くださるとありがたいです。 >>496 {=SMALL(IF((A$1:A$100<>"A店舗夜間")*(A$1:A$100<>"B店舗夜間"),B$1:B$100),ROW(A1))} >>401 >>404 >>466 です。 >>468 フォームを使う方法でかまいません。 >>404 に追記する形でも,まるっきり0からでもよいので教えてください。 >>497 >>498 496です。498さんの式でできました。ありがとうございました。 >>499 ユーザフォーム一つ作ってパスワード入力用のテキストボックスを置く 保護ボタンとか解除ボタンとか付けて、それ押したらそのテキストでブック保護切り替え、シート表示切替やるだけ シート上かメニューに呼び出し用ボタンか何か作ってそのマクロを呼び出す 但し、個人で使う用なら関係ないが、他人も使うなら運用でExcelのメニューにある「ブックの保護」を使わないようにしてもらう必要がある XMLでリボンメニューも弄れるが、そこまでするほどのもんでもない気がするので興味あったらやればいいんじゃないかな >>499 です。 >>501 ありがとうございました。 無事,目的のものができました。 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2012 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 不可 関数を教えてください。 セルのT2に「2019/8/19」のような日付の値が入っています。 そこで、毎月20日を締め日として 2019/8/19 なら 2019_8 2019/8/21 なら 2019_9 と返す関数として =(YEAR(T2)-IF(MONTH(T2)*100+DAY(T2)<=220,1,0))&"_"&(IF(DAY(T2)>20,MOD(MONTH(T2),12)+1,MONTH(T2))) を使っています。この関数に、「U2のセルが空欄ではなかった場合、1ヵ月繰り上げる」という条件を追加した式を教えてください。 >>503 念のため確認だけど、締め日は当月だよね? 2019/8/20 なら 2019_8 だよね? >>503 =TEXT(T2+IF(DAY(T2)>20,30,0)-IF(U2<>"",30,0),"yyyy""_""m") >>503 =TEXT(T2+((DAY(T2)>20)-(U2<>""))*30,"yyyy""_""m") こりゃだめだったわ 3月1日と3月2日におかしくなる =TEXT(T2+((DAY(T2)>20)-(U2<>""))*21,"yyyy""_""m") こんどこそ =TEXT(DATE(YEAR(T2),MONTH(T2)+(DAY(T2)>20)-(U2<>""),1),"yyyy""_""m") ありゃ、式をよく見たら年度初めは3月か めんどくさいな もっと短くできそうなんだけど、俺にはこれが限界だった =TEXT(DATE(YEAR(T2)-(MONTH(T2)+(DAY(T2)>20)-(U2<>"")<3),MONTH(T2)+(DAY(T2)>20)-(U2<>""),1),"yyyy""_""m") >>503 ひと月と20日前の年&20日前の翌月 =YEAR(EOMONTH(T2-20,(u2<>"")-1))&"_"&MONTH(EOMONTH(T2-20,(U2<>"")+1)) >>503 =YEAR(T2)&"_"&MONTH(EDATE(T2,IF(DAY(T2)>20,1,0)+IF(U2<>"",1,0))) >>503 訂正したわ =TEXT(EDATE(T2,IF(DAY(T2)>20,1,0)+IF(U2<>"",1,0)),"yyyy""_""m") VBAのユーザー定義関数なら簡単なんだけどなあ ワークシートの数式は途中経過からの分岐がめんどくさすぎる 一応できたけど、式が汚すぎる =TEXT(DATE(YEAR(DATE(YEAR(T2),MONTH(T2)+(DAY(T2)>20)-(U2<>""),1))-(MONTH(DATE(YEAR(T2),MONTH(T2)+(DAY(T2)>20)-(U2<>""),1))<=2), MONTH(DATE(YEAR(T2),MONTH(T2)+(DAY(T2)>20)-(U2<>""),1)),1),"yyyy""_""mm") 既に分かり易い答えがいくつか出てるのに何故そんな式を >>519 繰り上げって次の月にするって意味じゃないのか? え?時間や日付の繰り上げって数字が減る方向だよな? >>522 どれも間違ってるからだよ 質問の文章には書かれてないけど、例示された数式を見ると年度の変わり目が3月になってて、誰の回答もそれが反映されてない 訂正 正 "yyyy""_""m" 誤 "yyyy""_""mm" そうだったのか、じゃあ不等号か足し算を逆にしてくれ すまん 安価が無さすぎてどんな流れかサッパリわからん それどころかIDも無いから誰が連レスしてるかも分からん >>503 繰り下げ?を直して年度にしたわ、汚いわ U2が空白でない場合、2019/8/19なら2019_7、2019/8/21なら2019_8と表示されるぞ =YEAR(EDATE(T2,IF(DAY(T2)>20,1,0)+IF(U2<>"",-1,0)-2))&"_"&MONTH(EDATE(T2,IF(DAY(T2)>20,1,0)+IF(U2<>"",-1,0))) IDすら無いんだからせめて安価くらいちゃんとやらない? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる