Excel総合相談所 132
■ このスレッドは過去ログ倉庫に格納されています
▼━質問テンプレ (出来れば使ってね) ━━━ 【1 OSの種類 .】 Windows** 【2 Excelのバージョン 】 Excel** 【3 VBAが使えるか .】 はい・いいえ 【4 VBAでの回答の可否】 可・否 ▼━関連スレ━━━━━━━━━━━━ 前スレ Excel総合相談所 131 https://find.5ch.net/search?q=excel Excel VBA 質問スレ Part51(1000到達済み) https://find.5ch.net/search?q=excel+vba 【質問不可】Excel総合相談所スレの雑談・議論スレ4 https://find.5ch.net/search?q=excel+%E3%80%80%E7%9B%B8%E8%AB%87%E6%89%80 【1 OSの種類 .】 Windows** 7 【2 Excelのバージョン 】 Excel** 365(体験版みたいなやつ) 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 今まで24型モニタDPI=100%で印刷していたのを 27型モニタDPI=117%で印刷しようとしたところ、印刷範囲がずれてました。 原因はDPIみたいで、最初に作ったのがDPI=100ならば、それが基準になるので 新しい環境に変えてもDPI=100%しなければならないとの事で これを踏まえての質問があります。 DPI=100%以外の数値でも、印刷範囲をずれなくする方法を 液晶モニタを変える 解像度を変える 以外であれば教えてください 1年に十数ファイルも印刷するので、特定のファイルにのみ効果を及ぼす方法は駄目です。一度設定すると今あるファイルは勿論、今後作成するファイルにも 影響する方法が望ましいです。 Windows10にする Excel2019にする 特定のシェアウェア フリーウェアを導入する等、あらゆる方法をOKとします。 >>790 Sub TEMP() Dim TBL As ListObject Dim RowClient As ListRow Set TBL = Worksheets("Sheet1").ListObjects("Table1") Open "D:\TEMP.CSV" For Output As #1 Print #1, TBL.HeaderRowRange(3) & "," & TBL.HeaderRowRange(5) For Each RowClient In TBL.ListRows Print #1, RowClient.Range(3) & "," & RowClient.Range(5) Next Close #1 End Sub >>799 印刷範囲はずれるものと思っておいたほうが良い 個人的には、vbaで改ページ合わせるしか無いと思ってる >>793 >>800 ありがとうございます いただいた情報を参考にしなが自分なりに作成してみます >>790 >>795 について 全シートの3・5列をCSVで出す。より 全シートを1つにまとめたシートかCSVを作る マクロを作っておいたほうが将来的に楽よ シート名,行番号,A列,B列・・ の1つにまとまったものがあれば 今回の要望も手作業のコピペ+出力で足りる可能性がある >>799 ディスプレイの設定が印刷に関わる? Excelのバージョン、OS、プリンタとプリンタドライバは同じなのかな。 印刷範囲の設定がちがちにして、余白に余裕があれば、PC変えても大概ズレないが 環境により印刷可能サイズが狭くなるので、ギリギリの%指定で作ってるとたまにはみ出す A. もし印刷だけの資料なら、PDFにしてしまったほうが確実 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ(マクロの記録程度なら可) 【4 VBAでの回答の可否】 可能であれば使わない方法で、使わなければ解決しないようであれば使った回答をお願いします。 直撮りで申し訳ないのですが、画像のような表で、17行目の@〜Eに、空白を除き、各行ごとに比較して、各列(H31〜H26)に最小値が入っている個数をカウントしたいです。 例えば、 @は10行目の1908と16行目の1913の2個が最小値なので「2」 Aは14行目の1805が最小値なので「1」 Bは最小値が無いので「0」 と表示させたいです。 COUNTIFやMINを使ってやってみたのですが、うまく行きません。ご教授よろしくお願いします。 https://i.imgur.com/jd1K1JD.jpg >>805 追記 たとえば@に入る関数を示していただければ、A〜Eについては引数を変える程度はできますので、1つ例として挙げていただくだけで結構です。 よろしくお願いします。 =if(SMALL(a2:h2,COUNTIF (a2:h2,"")+1)=a2,1,0)+if・・・ 別シートで、最小値かどうかを1,0で保持する そこの縦で1のカウントをとる Sheet2のA2に =IF(A2=MIN($A2:$H2),1,0) で票の範囲全部にコピー @〜には=COUNTIF(A$1:A16,1) いっぱいシートがあったり、行数がちょくちょく変わるのであれば。。。困ったな >>805 G列に最小値を入れて配列数式で計算するのはどうでしょう? >>809 具体的に数式書くと =sum(if(A2:A16=$G$2:$G$16,1,0)) これを配列数式で入力 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2019 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 2019から搭載されたideasって機能が見当たらないのですが、 表示させるにはなにか操作が必要なのでしょうか? https://i.imgur.com/exstLyf.png shareの下辺りに出ると思うのですが >>811 >>2019 から搭載されたideasって機能が見当たらないのですが、 2019から搭載??? Excel のアイデア(Excel for Office 365) https://support.office.com/ja-jp/article/excel- のアイデア-3223aab8-f543-4fda-85ed-76bb0295ffc4 AIとか搭載されたのか、知らなかった。 そのうち「先月と同じ報告書」って入力したら同様の書類全部作ってくれるようになるな >>801 えー マイクロソフトは何年も前から仕様です で済ませてるし 全然改善しようしないですよね。VBAはよく判らない>< >>804 液晶モニタのみ買い換えたんですよ 他は同じです 毎日の売り上げを基調してるんで、pdfオンリーではないです>< Excelで質問です A1に数字の1が入力されたら B2に300を入力するという 関数を教えてください >>812-813 365の機能でしたか、残念 2019で搭載!と言ってるブログが多くて信じてしまいました。試したかったなぁ 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2016 【3 VBAが使えるか .】 はい(コピペして一部編集して使うくらいのレベル) 【4 VBAでの回答の可否】 可 表の構成が同じSheet1とSheet1(1)があります 最終行はSheet1とSheet1(1)で違います A列をA5から順番に1つ1つ下に見てA列が一致するB列以降をSheet1(1)からSheet1に B列以降の列を値で貼り付けしたいです B列からどこまでコピペするかは変えるかもしれないので簡単に変えられるようにしておきたいです 要はvlookupのようなことがしたいですが vlookupだと式を1列ずつコピーして値で貼り付けになり時間かかるので 値でいきなり貼り付けたいです >>819 Sub 探すで() Dim Y1 As Long Dim Y2 As Long Dim X As Long Dim r As Range Const START_ROW As Long = 5 Const COPY_MAX_COL As Long = 20 On Error GoTo eH Application.ScreenUpdating = False For Y1 = START_ROW To Sheet1.Cells(START_ROW, 1).End(xlDown).Row '、空白でストップ Set r = Sheet2.Columns(1).Find(Sheet1.Cells(Y1, 1).Value, , , xlWhole) 'A列で探す If Not (r Is Nothing) Then Y2 = r.Row Sheet2.Range(Sheet2.Cells(Y2, 2), Sheet2.Cells(Y2, COPY_MAX_COL)).Copy Sheet1.Cells(Y1, 2).PasteSpecial xlPasteValues End If Next Y1 eH: Application.ScreenUpdating = True End Sub sheet2 = Sheet1(1) で。 あ、不細工やらかしてるけど、動く動く。 >>820-821 できました! アレンジして使いたいと思いますが質問あります Const START_ROW As Long = 5は5行目から須田とかと思うのですが、 Const COPY_MAX_COL As Long = 20は横幅は20列がコピーするMAXという意味でしょうか? 塗りつぶした色付きでコピーすることできるでしょうか? シートAに シートBのB列からシートAのAB9と同じ文字の行を探し シートBのその行のCQ列の文字をシートAに入力したいのですか その計算式を =IF(ISERROR(VLOOKUP($AB$9,シートB!$B:$CQ,85,FALSE)),"",IF(VLOOKUP($AB$ 9,シートB!$B:$CQ,85,FALSE)="","",VLOOKUP($AB$9,シートB!$B:$CQ,85,FALSE))) としたのですが なぜか CQではなくCH列の文字を入力します シートAに シートBのB列からシートAのAB9と同じ文字の行を探し シートBのその行のCQ列の文字をシートAに入力したいのですか その計算式を教えてください 👀 Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>823 =IFERROR(VLOOKUP($AB$9,シートB!$B:$CQ,94,FALSE),"") >>824 >>825 ありがとうございます 解決できました 列番号ところがポイントでした ここを範囲を指していると勘違いしてました =L26*U26が L26とU26の値が無いの場合は ♯VALUE! になってしまいます これを♯VALUE!ではなく空白にするには =L26*U26をどうすれば良いですか? >>822 値でコピーしたいというので値コピーだけにしちゃった。 VLOOKUPにならないようにってことね 全コピーでOKなら 中央を差し替え。 If Not (r Is Nothing) Then Y2 = r.Row Sheet2.Range(Sheet2.Cells(Y2, 2), Sheet2.Cells(Y2, COPY_MAX_COL)).Copy Sheet1.Cells(Y1, 2) End If >>830 できました! ありがとうございます、完璧です >>805 既に同じような方法が書かれておりますが、 G列に各行の最小値をMIN関数で求めておき、 まる1=SUMPRODUCT((A2:A16=$G2:$G16)*1) そんな便利な関数が、勉強になりました。サムあなどってた SUMPRODUCTは重い たくさんあると目に見えて遅くなる SHIFT + SPACE (行選択) て突然効かなくなるけど何で? テンプレ無視ですみません 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 2010 【3 VBAが使えるか .】 否 【4 VBAでの回答の可否】 否 B列にコードが並んでいて、それが正しいパターンかをC列に○×で表示させたいです。 正しいパターンは半角7桁で最初の3桁が英字(大文字)で残り4桁は数字です。 どうすれば条件通りに○×をつけられますか? ExcelのVBAがPythonベースに変わるという噂を聞いたんですけど 本当ですか? >>837 = IFERROR( IF( AND( AND(CODE(MID(A1,1,1))>64,CODE(MID(A1,1,1))<91), AND(CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91), AND(CODE(MID(A1,3,1))>64,CODE(MID(A1,3,1))<91), AND(CODE(MID(A1,4,1))>47,CODE(MID(A1,4,1))<58), AND(CODE(MID(A1,5,1))>47,CODE(MID(A1,5,1))<58), AND(CODE(MID(A1,6,1))>47,CODE(MID(A1,6,1))<58), AND(CODE(MID(A1,7,1))>47,CODE(MID(A1,7,1))<58) ),"○","×"), "×") >>838 検討中 実際に決まってるのはjsの方 IF(IF(IF(IF()))) しか知らん無知やった。AND ちぃ憶えた >>841 エクセル2019ではifs()関数ってのが出るからもうちょっと楽になるよ >>840 IFERRORとCODEを使ってる理由、ANDを二重にしている理由の解説きぼん 俺はこんなんでもいいかと思ったんだが、だめなんだろうか、あんまりEXCELに詳しくないんでよくわからん =IF(AND(LEN(B1)=7, "A"<=MID(B1,1,1),MID(B1,1,1)<="Z", "A"<=MID(B1,2,1),MID(B1,2,1)<="Z", "A"<=MID(B1,3,1),MID(B1,3,1)<="Z", "0"<=MID(B1,4,1),MID(B1,4,1)<="9", "0"<=MID(B1,5,1),MID(B1,5,1)<="9", "0"<=MID(B1,6,1),MID(B1,6,1)<="9", "0"<=MID(B1,7,1),MID(B1,7,1)<="9"),"○","×") >>843 文字列そのままで比較は怖くて使わないだけ。vbaで挙動が変わったりするしね でも今回みたいにA-Z、0-9ぐらいなら使っても問題なかったわ >>840 よりも>>843 の方が良いと思う 数字判定って少数や指数認めるので記号不可はまとめて判定しづらい AAA-987 BBB12.3 CDE+456 ZZZ10スペース2つ などが抜ける 一個ずつ四則演算してエラー分岐も考えたけどもうええかなって TRIMとかINTとFORMATあたりを組み合わせて0000から9999に入ってるかどうか調べる手も考えられるけど、たぶん1文字ずつ判定の方が式が簡単になるんと違う? 誰かヒマなやつ、逃避したいやつ、考えてみてくれ みんないつもVBAでやってて あえて数式で文字コード以外になんかあったっけ、って考えた人が結構居そう ・・0000〜9999のデータにMATCHを・ >>844 いや、843は問題がある 大文字かどうかの判別ができてない =AND( LEN(TRIM(MID(A2,4,4)))=4, TEXT(VALUE(MID(A2,4,4)),"#")=MID(A2,4,4), TEXT(INT(MID(A2,4,4)),"#")=MID(A2,4,4), TEXT(ABS(MID(A2,4,4)),"#")=MID(A2,4,4) ) >>840 が一番だよパトラッシュ・・抜け道あるかもわからん =AND(LEN(MID(A1,4,4))=LENB(MID(A1,4,4)),ISNUMBER(MID(A1,4,4)*1)) =AND(LENB(MID(A1,4,4))=4,ISNUMBER(MID(A1,4,4)*1)) >>851 よく気づくねぇこんな事。内部的にどういう処理してるんだろ >>852 AAZ0001 でだめだった >>853-854 それは AAA-234 でも通るって上に出てるじゃん 正規表現使いたい・・・使いたくない? まぁあんまりテクニカルな事すると漏れが出てくるね >>855 マイナス問題はabs関数に入れるっていうのはどうかな? >>856 どうかな?と言われても。検証は自分でやって そこまでテクニカルにすると逆にしんどくなるだけだとは思う。俺ならしない 今気づいたけど、840も問題あるね 数字が5文字以上でも○になる >>858 あーlen()いるのか もうやだー = IFERROR( IF( AND( len(a1)=7, AND(CODE(MID(A1,1,1))>64,CODE(MID(A1,1,1))<91), AND(CODE(MID(A1,2,1))>64,CODE(MID(A1,2,1))<91), AND(CODE(MID(A1,3,1))>64,CODE(MID(A1,3,1))<91), AND(CODE(MID(A1,4,1))>47,CODE(MID(A1,4,1))<58), AND(CODE(MID(A1,5,1))>47,CODE(MID(A1,5,1))<58), AND(CODE(MID(A1,6,1))>47,CODE(MID(A1,6,1))<58), AND(CODE(MID(A1,7,1))>47,CODE(MID(A1,7,1))<58) ),"○","×"), "×") 文字列判定なんて普通は1行のもんで 飲み会二時間盛り上がれそうな奴が揃ってるな >>837 作業セルを2つ作って、一つはアルファベット、もうひとつは数字を入れておく それを使って1文字ずつfind関数に入れていって、全部足したのがエラーになるか判定する どうかな? いいな、いっそ桁ごとに、7セル有効文字データを持つ方が好き 桁不足と全角文字入りを突破すれば行けそう 大文字と小文字の問題がなあ、無視してくれる関数があるから UPPERして同じかどうか判定するか AAA〜ZZZはセルの列アドレスに変換してどうにかならんかな あと、元の質問はB列の判定だから、サンプル上げるやつはA1じゃなくてB1と書いた方が >>859 ANDを入れ子にする必要はないだろ 後ろ4文字が数字かどうか 思ったほど短くならんかった =IFERROR(RIGHT(B1,4)=TEXT(RIGHT(B1,4)*1,"0000"),FALSE) =IF(AND( LEN(B1)=7, CODE(MID("AAA0000",{1,2,3,4,5,6,7},1))<=CODE(MID(B1,{1,2,3,4,5,6,7},1)), CODE(MID(B1,{1,2,3,4,5,6,7},1))<=CODE(MID("ZZZ9999",{1,2,3,4,5,6,7},1)) ),"○","×") =IF(IFERROR(AND( LEN(B1)=7, FIND(MID(B1,{1,2,3},1),"ABCDEFGHIJKLMNOPQRSTUVWXYZ"), FIND(MID(B1,{4,5,6,7},1),"0123456789") ),),"○","×") 865の下段が完成形ぽいね より短くするならfind()をひとつにできるけど、それだと可読性が下がる 何がすごいってめちゃくちゃテクニカルなのに可読性が全く損なわれてない事 (もちろん配列が読める前提) 正規表現なしでここまで出来るとは恐れ入った >>866 これは配列定数だよ 配列数式は {=max()} みたいに全体が括弧でくくられる奴 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2017 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 VBAについての相談です。 『現在の選択セルがA〜C列の、何れか1セルである』 時に、 キーボードのZ, X, C のそれぞれのキーを押した際、通常の文字入力を行わずに 『Zキーを押したら現在選択中のセルと同じ行のA列のセルを選択し、"〇"を入力して1つ下のセルを選択』 X、C についても同様に 『Xキーを押したらB列のセルに"×"を入力して1つ下に』 『Cキーを押したらC列のセルに"△"を入力して1つ下に』 としたいのですが、どういうコードを書けばいいのでしょうか? 以上、詳しい方ご教授ください・・・ 単純な1キーの監視はAPI使わないと無理じゃないかな [ctrl]+[x]とかでいいならOnKeyメソッドでいけるんじゃない 位置判定はActivecellのaddressやcolumnで 【1 OSの種類 .】 Windows10と7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 教えてください。 一般的に、モジュールの名前やフォームの名前を、全角の日本語にするのはリスクがあるのでしょうか? 現在、module1などのデフォルト名と、フォームはF01などの半角英数字のみの名前にしているのですが。 数が増えてくると半角数字+日本語という名前にしたいな、と思っています。 ぶっちゃけ自由ですが 1に判りやすさ 2に使いやすさ 3に判りやすさ mod各種定義 frm01メニュー画面 frm11処理1メイン画面 mod○○系演算処理 VBAコード内で頻繁に使うのであれば、英字オブジェクトのほうが良いですかね、 PG畑の人は育った畑のネーミングルールになると思いますが プレフィクスに前3文字で種類ぐらいあるといいかな 先頭数字は無理です >>872 シートモジュールに Sub Sample2() Application.MacroOptions Macro:="Sample1", ShortcutKey:="j" End Sub 標準モジュールに Sub Sample1() MsgBox "aaa" End Sub これでctrl+Jでメッセージボックスが出る どうでもいいけどこれ、「1」「2」「3」 とか入力してあとで置換した方が早くない?? 作ってる途中で無意味な気がしてきたんだけど >>875 一年ぐらい前。accessのVBAで、functionかフォームの 先頭の文字が日本語だとマクロが動かなくなるという絶望的なアプデがあった 他の人が使うファイルなら、避けれるなら避けたほうが良いと思う 自分が使うものならその場で書き換えればいいだけなので、まぁなんとでもなるからどっちでも良いと思う 自分で入力するリストとかは、○と×はoとxで入力しちゃうな。 あとはooやmやら決めて キー入力に余計なことやると、文字入力しても影響受けるからお勧めできない 入力は0と1 後は書式設定で反映させるってのをやったことがあるけど、特に意味が無いことに気づいた >>881 sumとかsumproductに使えるからたまに使う 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ (上司に相談したら駄目だと言われた) 【4 VBAでの回答の可否】 否 口で説明するのが難しい場合、グーグルのスプレッドシートを貼り付けても大丈夫でしょうか? >>884 ありがとうございます https://docs.google.com/spreadsheets/d/1xhIJYvPHB1Th8T28FMbjN527rmZhTbz_lsW-yVEtUUE/edit?usp=sharing シートを跨いで、データを入れて、最終的には表にしたかったのですが 参照方法を忘れてしまい、処理が出来ません 条件 ・実際には1万件近くのデータがあり、来月には更に1万件、来年の今頃にまた1万件来るので データのシートに情報を投げ入れて、少し弄る程度で表が横に増やせるようにしたい ・該当する月に取引がない場合は、0を入れたい(nullでも可) お願いします sumproductってテーブルを参照できましたっけ? >>883 よくわからんけど > 【3 VBAが使えるか .】 いいえ > 【4 VBAでの回答の可否】 否(上司に相談したら駄目だと言われた) じゃねーの? >>885 sumifsを使う。所要時間10分 http://fast-uploader.com/file/7096969940696/ ってか、ピボットなら一瞬でできる。所要時間1分 後、シート名風流でいいね。 うんこちんこ書いてる無能には見習って欲しい >>888 自力でやれそうです! ありがとうございます! sumifs、完全に忘れてた…… >>878 エクセルでも起きたよ。ファイルが破損して完全に死ぬから古いエクセル残してない人は積んだ。 ちなみにモジューム名の末尾全角がアウト 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 すみません、式を教えてください。 例えば商品があって A列 B列 商品 合計 にんじん 0 バナナ 0 りんご 0 味噌汁 0 にんじん 1 団子 0 バナナ 1 にんじん 2 以下同じように続く・・・ というように同じ商品が出たら合計が1つずつ加算される関数を教えてください。 最初は0にしたいんです。次が1で同じのを入力すれば1ずつ増えるようにしたい。 よろしくお願いします。 >>891 B2=COUNTIF($A$1:A1,A2) >>893 B2セルに =COUNTIF($A$1:A1,A2) を入れるって意味DAYO >>894 上手く行きました。 ご親切にどうもありがとう!! >>890 も・・モジュール名だけだよな、きっと、 personalのプロシージャはめっちゃ日本語だらけだ。 mac背景色赤()とか モジュール名は気を付けよう。 普通に使う 無理に下手な英語やローマ字にするよりよほどわかりやすい 漢字で書ける内容なら文字数(バイト数)が減って行が短くできるのが日本語のメリットだな カタカナで書くぐらいなら英語使うけど ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる