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 >>455 直接的な回答ができなくて申し訳ないけど ・特定のブックだけの現象なのか ・他のエクセルのショートカットは動くのか ・他のオフィスソフトのショートカットは動くのか ・各キーの故障の可能性無いのか など、原因をもう少し追求してみると何かわかるかもしれません >>456 ありがとうございます 一応試したこととしては Excel2010でショートカットキー使えるか→使える 他のショートカットキー→CTRL+SHIFT+P でフォント変更は呼び出せた キーボードのチェック→文字は問題なく打てた ブックはExcel立ち上げてすぐの新規のブックで、念のためPCの再起動をしても解消しませんでした 他のオフィスのショートカットは試してないので、試してみようと思います 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 否 【4 VBAでの回答の可否】 否 Sheet1のA列に期限日、B列に作業内容、C列に「未」か「済」のどちらか の表があります。 ここからC列が未になっているものだけをSheet2に期限日と作業内容をリスト化したいのですがどうすればよいでしょうか Sheet1を編集したらSheet2も連動するようにしたいです。 ちなみにSheet1は加工が許されていないので補助列の追加などはできません。 Sheet2だけで何とかする方法を教えてください。 【例】 Sheet1 A B C 2018/10/01 資料作成 済 2018/10/02 報告書作成 未 2018/10/03 給与査定 未 2018/10/04 見積もり作成 済 Sheet2 A B 2018/10/02 報告書作成 2018/10/03 給与査定 >>458 excel オートフィルタ 関数 で検索すると出てきます。 要は、オートフィルタでできることを、関数でやってしまおうということですよね。 >>459 それだとSUBTOTAL関数でオートフィルタの表示に連動させた計算結果をだすサイトが出てきます。 関数の式で教えてください。 >>458 Sheet1は弄れないならSheet2にリンクを貼ってから処理するだけ作業列も使い放題 >>458 期限順に並べ替える訳ではなく、単純に上から順番に抽出するだけなら、作業シートを作って、元シートの内容をリンクさせる、countifで上から何番目の未完了なのか数えて、抽出シートにvlookupかindexとmatchてひっぱってくるのはどうでしょう? こうやってやりかた教えてるのにとにかく式は?って聞いてこられるのはつれぇな >>467 提案した全部の内容に関して全ての数式を書く気にはならないので、説明した内容で「この部分の意味がわからない」「この部分の意味はわかるけど、実装する数式がわからない」とか個別に聞いてくれたら(程度によっては)回答します そもそも、仕事の依頼であればきちんとエクセルのブックで納品しますけど、軽い相談であれば、やり方の提案はしますが、最後は自分で頑張ってくださいね、って思ってます >>468 文章はどうでもいいので関数式だけ書いてね >>464 初心者なんで優しくしてくださいよ どこかのサイトに全く同じのが載っているのなら アバウトに検索方法じゃなくて具体的にURLで頼みます >>471 ここは初心者に優しくするスレじゃなくてドヤ顔するスレ windows7 excel2010 現在データ入力作業中なのですが、質問させていただきたいです。 ブックが100個あり、すべて同じセルにデータが入力されています。 このデータを別ブックのシート1にまとめたいと思います。 そこで、ブック1のデータを集計ブックのセル1に、ブック2のデータをセル2に…といったVBAプログラムが知りたいです。 できるだけ短いコードが知りたいのですが、どなたかご教示頂けませんでしょうか? よろしくお願い致します。 >>473 ブックの名前は? 全て同じフォルダにある? >>475 名前は(1)〜(100) 全て同じフォルダ内にあります。 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 はい・ 【4 VBAでの回答の可否】 可・ セルA1が空白なら「社員番号がありません」とウィンドウでキャンセル、 セルB2が空白なら「日付がありません」とウィンドウでキャンセル、 セルC3が空白なら「時刻がありません」とウィンドウでキャンセルする方法がわかりません。 御指導、ご鞭撻をお願いします。 if range("a1").value="" then mes1="社員番号" if range("b1").value="" then mes1=mes1 & " 日付" if range("c1").value="" then mes1=mes1&" 時刻" if mes1 <> "" then msgbox mes1&"がありません",vbokonly exit sub end if >>473 ファイル名に規則性があるなら、indirect関数でファイル名の部分を変化させて参照するのはどうでしょう? ブック開かないと重いのであれば、自分ならvbaで全部のブックを結合して参照します >>480 ありがとうございます 後出しで申し訳ないのですが、参照ブックの特定の1列のみを抽出したいのです。 また、参照ブックはコピー及び結合などの手を加えることが禁止されています。 INDIRECTも考えましたが、ブックの数が数なので、すべてを開いておく事は難しいです。 回答頂き大変有り難いのですが、別の方法はありませんでしょうか? >>478 コンパイルエラー 変数が定義されていません。 と出ました。 >>478 自己解決しました。option Ecplicitを削除したら機能しました。 ありがとうございました。 >>481 10年位前に作った同じフォルダ内のエクセルブックの一番左側のシートを結合してシート名をファイル名の頭4文字にするコードです 元のシートをそのまま残せば、結合しても問題無いのでは? Private Sub CommandButton1_Click() Dim fn As String Dim wk As Workbook Dim wh As Worksheet fn = Dir(ThisWorkbook.Path & "\*.xls", vbNormal) Do While fn <> "" If fn <> ThisWorkbook.Name Then Set wk = Workbooks.Open(ThisWorkbook.Path & "\" & fn) Set wh = wk.Sheets(1) wh.Name = Left(fn, 4) Call wh.Copy(, ThisWorkbook.Sheets(1)) Call wk.Close(False) End If fn = Dir() Loop End Sub >>485 ありがとうございます 少し改変し使わせて頂きました 無事作業も終了しました。 >>483 なんで悪化させてんの そのくらいなら無視しても良いレベルだけどさ、、 >>487 余裕がなかったのです。 >>484 200以上になるので無理でした。 >>488 いや、変数定義しろって言うエラーなのに、定義しなくていい方に持って行ってるからさ。 windows10 excel2016 マクロ不可 質問です。 範囲選択してる時に、選択されている範囲を取得(表示させる)方法ってありますか? 例えばA1:H500を範囲選択すると、名前ボックスにはアクティブセルのみが表示されますよね。A1とか。 A1:H500だというのを確認する方法が知りたいです。 Ctrl+Tで、テーブル作成ダイアログを出して(その後キャンセルする)確認する方法などしか思いつきませんが、スマートな方法ってありますか? >>490 それよりスマートかは分からないが、Shift+ENTER >>491 ありがとうございます。 なるほど、アクティブセルが一番左上の場合には使えますね。参考になります。 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 https://i.imgur.com/eP5u2A1.png こんな感じで右側のデータベースに野菜とそれに対応する画像があって 左側の記録表に野菜の名前を入力すると自動的に画像を隣のセルに表示する、という表を作りたいです excel vlookup 画像 で検索すると数式→名前の定義を利用した方法の解説が出てくるのですが列すべてに対応出来ません よろしくお願いします >>493 その画像の通りなら普通に名前定義で出来るはずだが、列すべてと言うのが何を言いたいのかわからない G3〜G6に名前(トマト、キュウリ…)を付ける→G3(トマト)セルをコピー→C3に「リンクされた図」で貼り付け→名前の定義で「名前」を「野菜」、「参照範囲」を=INDIRECT(Sheet1!$B$3)→B3セルに適当に文字入力(エラー回避)→C3の画像を選択して数式バーで「=野菜」と指定 という風にやってC3はB3を反映しますがC4がB4を反映してくれる訳ではありません。この方法だと手作業でこれを繰り返して大量の名前の定義を作り出すことになってしまうので別の方法がないかと 言葉足らずでした >>493 自分だけでいいならfont-awesomeを使うとか〜 >>495 なるほど。名前定義は引数取れないから無理そうだね。VBAでユーザー定義関数作ればなんとかなりそう 【1 OSの種類 .】 Windows 10 Pro 【2 Excelのバージョン 】 Excel 2013 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 「このブックの自動回復を行わない」にチェック付けても、強制終了時に自動回復ファイルが作成されてしまうのですが、 回避方法はあるでしょうか? ▼━質問テンプレ (出来れば使ってね) ━━━ 【1 OSの種類 】 Windows10 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 可 入力時常に上書きモードになるので挿入モードに変更したいです insertキーは押しておらず、緑色のバーで右クリックを押すと出てくるユーザー設定では上書きモードにチェックは入っていません 他に何をすればよいですか 【1 OSの種類 .】 Windows8.1 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 いいえ(起動して入力するまではできます) 【4 VBAでの回答の可否】 可 初心者です。説明が下手なので画像付きで質問させていただきます。 Sheet1で図のように入力すると、自動でSheet2に図のように入力されるプログラムを作りたいです。 Sheet1:https://i.imgur.com/jzCfjb5.jpg Sheet2:https://i.imgur.com/ChU3p4G.jpg よろしくお願いします。 >>503 シート1の3行目以降も同じように入力していくのを想定してるの? その場合、そのデータはどこに増えていくの? シート2の11以降に増やすのか、シート3を作ってそこにデータを入れるのか。 >>503 すみません補足です。 Sheet2のA列の数字は既に入力されており、Sheet1で第2行,A〜Dのデータを入力すると、Sheet2の画像のように自動入力されるプログラムを作りたいです。 転記するのはいいとして、どのタイミングで転記するか決めないと。 ボタンを押すのか、あとは例えばE2をダブルクリックしたら2行目を、E3をダブルクリックしたら3行目を転記するとか。 4項目全部入力したら転記するのかとか、消す場合はどうするのかとかも決めておかないと。 >>507 ボタンを押すと転記する形でお願いします。 何度もすみません。 記載行に重複がある場合は下にある行の内容に書き換えても問題ない? それともメッセージで既にデータがあります!とか確認する? >>507 見落としていましたが消す場合は空白を入力しようと思います。 >>509 書き換えで問題ありません。 ボタンを押すとなると、データが複数ある時にどの行のデータを転記するかというのを決めなきゃいけない。 普通は一番下の行だろうけど。 Sub test() Dim i As Long Dim myRow As Long 'myRowは一番下のデータがある行(C列で上から下に検索する) myRow = Cells(1, 3).End(xlDown).Row 'Sheet2をオブジェクト変数Ws2に Dim Ws2 As Worksheet Set Ws2 = Worksheets("Sheet2") '最終行のC列、D列に数値が入っていて、D列の数値>=C列の数値である場合のみ転記をする。 If IsNumeric(Cells(myRow, 3)) = True And IsNumeric(Cells(myRow, 4)) = True And _ Cells(myRow, 3) <= Cells(myRow, 4) Then For i = Cells(myRow, 3) To Cells(myRow, 4) Ws2.Cells(i + 1, 2) = Cells(myRow, 1) Ws2.Cells(i + 1, 3) = Cells(myRow, 2) Next i Else MsgBox "入力値が適正ではありません" End If End Sub >>503 vba使わないで関数で引っ張るのはどうですか? どれくらいの量になるのかによるけど、作業列使って計算すればできますよ >>512 起動しました!ありがとうございました! 対象が最終行だけだと、入力データ多い場合かなりめんどくさそう >>516 その場合、E列をWクリックするとその行のデータをもとに転記するイベントプロシージャにすれば? それか、アクティブセルの行を転記するようにすればいいか。 myRow = ActiveCell.Row に変更すればいい。 3行目をアクティブにした状態でボタンを押せば、3行目のデータをもとに転記される。 >>517 こういう場合は一括処理にするか、難しいけど関数でやるほうがいいよ ドラッグ(矩形選択)した行を一括転記するようにしました。 これ、適正でない行が多いとmsgboxが何回もでるけど、いい方法あります? 変数jをelseの時だけ配列に入れて、それをmsgboxでまとめて1回だけ出すとかできるかな。 「5行目6行目のデータが適正ではありません」みたいに。 Sub test() '矩形選択範囲から行を取得、該当業のデータをもとにsheet2に転記するプロシージャ '例)A2:A8を選択した状態なら、2行目から8行目 ' B3:B10を選択した状態なら、3行目から10行目 Dim i As Long Dim j As Long 'Sheet2をオブジェクト変数Ws2に Dim Ws2 As Worksheet Set Ws2 = Worksheets("Sheet2") 'C列、D列に数値が入っていて、D列の数値>=C列の数値である場合のみ転記をする。 For j = Selection(1).Row To Selection(Selection.Count).Row If IsNumeric(Cells(j, 3)) = True And IsNumeric(Cells(j, 4)) = True And _ Cells(j, 3) <= Cells(j, 4) Then For i = Cells(j, 3) To Cells(j, 4) Ws2.Cells(i + 1, 2) = Cells(j, 1) Ws2.Cells(i + 1, 3) = Cells(j, 2) Next i Else MsgBox j & "行目の入力値が適正ではありません" End If Next j End Sub >>519 Sub 偶数() '1から10の中で偶数一覧を出力する For i = 1 To 10 If i Mod 2 Then 'do nothing. Else 偶数一覧 = 偶数一覧 & i & "," End If Next 'output If 偶数一覧 Then MsgBox "偶数:" & 偶数一覧 Else MsgBox "偶数なし" End If End Sub 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 2010 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 A列に半角英数字10桁の商品コードが並んでいます。 タイプとしては英数字混在のものと数字だけのものです。英字だけのコードはありません。 B列には商品名があり、index(match)で商品コードを入れたら商品名を表示させたいです。 しかし、商品コード入力欄にテキスト入力をすると、商品コードが英数字混在のものしかヒットしません。 matchの検索値をvalue()で指定すると今度は数字だけのコードしかヒットしません。 どちらでもヒットするようにするにはどうすればよいでしょうか? >>522 現在の商品コードを文字列で同一すべき 適当な作業列に「=TEXT(A1,"@")」みたいに書いて、これをコピーして値として貼り付けで文字列に変換できる。 今後の登録のために、商品コード列の書式設定は「文字列」に変える MATCHの第一引数に指定したセルも文字列に変える。 それが無理ならMATCH(TEXT(・・・,"@"),・・・)にすればいい。 powerpivot機能ですが、 エクセルではフォローされている36:00:00みたいな24時間を超える書式[h]:mm:ssが、powerpivotではフォローされていないのか、データ型を日付にするとエラーになってしまい、テキスト型になってしまいます。 何か回避策はありませんでしょうか? 1 OSの種類 .】 Windows** 【2 Excelのバージョン 】 Excel** 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 一つのセル内に プリン3個、エアコン2個、ミカン4個、バナナ2個 という風に固有名詞は無秩序、個は規則的なセル内の数字を 合計して出すにはどうすればいいでしょうか 「合計して出す」てどういう意味さ? 3+2+4+2をしろということ?答えはどこに表示させるの? FINDで「個」の位置を順番に把握して MIDで切り出して LOOKUPがらみで数値だけ抜き出して 足す 感じになるのかな。「個」の個数が不定だと修羅の道 あと、10000個とかあると関数では切出すのも大変だ そもそもそんなデータ(1つのセルに文字列と数値が混在、単位まで付いてる)を作らないようにしないと。 項目 数値 単位 の3列でデータ作るようにする。 単位は表示形式で付ける方が良いかも知れない。 >>530 さんの方法でやるか、固有名詞(りんご、バナナ)を全てピックアップできるなら、もう少し簡単にできるけど。 いったんテキストファイルにしたものを開くときに区切り位置、区切り文字を指定してバラす 固有名詞の部分に半角が含まれてないなら簡単 含まれてたら配列使うことになる >>526 その条件だと現実的には出来ないかも知れない 条件を後出しせず全て書いてくれないと >>535 条件は書いてあることで全てだったのですが A1 プリン3個、エアコン2個、ミカン4個、バナナ2個 A2 RIGHTB(LEFT(A1,FIND("個",A1)-1),2)*1 A3 FIND("個",A1) A4 RIGHTB(LEFT(A1,FIND("個",A1,A3+1)-1),2)*1 A5 FIND("個",A1,A3+1) の繰り返しでできましたありがとうございました。 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 特定の計算をしたいのですが、前もって最下行までセルに式を入れるとファイルサイズが大きくなりすぎたので、 VBAで計算させる様にしたのですが、問題があります。 1.AC列はZ列から+14の日付にしたい。 2.このマクロだと1行目が書き換わってしまう。 3.シート「保全_集計表」を別のブックに貼り付けしたいのですが、別ブックのサイズが3MBになることがあります。てしまいました。 この3点を解決する方法があればご教授願います、 サンプル http://fast-uploader.com/file/7093705631477/ もし、P2が0(ゼロ)のとき、Q2はO2*(2/3) もし、P2が0(ゼロ)じゃないとき、Q2は(O2-P2)*2/3 真偽の数字を、100のくらいから四捨五入したいのですが、IF関数にROUND関数を組み合わせる方法がわかりません。 IF(P2=0,O2*(2/3),(O2-P2)*2/3と組んではみました。 例えばQ2セルが13,333となった場合は、13,000で表示されるようにしたいのです。 私は看護師で、社員旅行の会計を任されましたが、バカなのでわかりません。教えてください。 O2は月々の旅行積立額、P2は旅行代金、Q2は返金額です。旅行は泊まり、日帰りとあって、日帰りの場合は積立額から、旅行代金を引いた2/3を積み立てた人に返して、旅行に行かなかった人は、積立額の2/3を返すことになっています。泊まりは、積立全額が旅行代金になります。 >>538 i=1をi=2にすれば1行目は書き換わらないけど、何か問題ありますか? >>539 =ROUND(IF(P2=0,O2*(2/3),(O2-P2)*2/3),-3) >>540 問題ありません。i=2で1行目が変わらないのですか。 >>542 cells(i,16)だと、iが1のときは1行目16列目のP1を書き換える。 >>543 サンプルは2行でしたが、2000行位になります。条件付きでループを終了させたいのですが、思いつきませんでした。 >>544 話がかみあってないけど、「For i = 1 to」を、「For i = 2 to 」に変更する。 3行おきになっているのは、そのままでもいいけど、変数jにした方が見やすい。 別ブックに張り付けるのは、どのブックか不明なので(新規ブックなのか既存のブックなのか等)、もっと情報がないとわかりません。 Sub calclation() Dim i As Long Dim j As Long Dim MaxRow As Long MaxRow = Sheets("保全_集計表").Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To MaxRow For j = 16 To 46 Step 3 Cells(i, j).Value = Cells(i, j - 1) + Cells(i, j - 2) Next j Cells(i, 29) = Cells(i, 26) + 14 Next i End Sub >>545 既存のブックになります。 よろしくお願いします。 >>546 既存のブックなら、余計分からない。 そもそも、vbaで計算結果入れるだけで重くなるなら、もともとのブックに問題があるのでは? よろしくお願いしますって、何をしてほしいのか。 >>539 ifはいらない =ROUND((O2-P2)*2/3,-3) ▼━質問テンプレ (出来れば使ってね) ━━━ 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 はい・ 【4 VBAでの回答の可否】 可・ A列 B列 C列 D列 E列以降 ID 品名 型式 残数 日付 E列以降に日付を入れるとD列(残数)が-1するにはどうしたらいいでしょうか? D2が5でE2、F2に日付が入るとD2が3と表示させたいのです。 >>549 A列 B列 C列 D列 E列 F列以降 ID 品名 型式 残数(入力) 残数(計算後) 日付 でいいなら、 E2=D2-COUNTIF(F2:H2,">0") D列をそのまま変更するのはvbaがいる上に結構めんどくさい (コメントに元の数値を逃して、計算するなどの変な処理が必要) >>550 ありがとうございます。こちらの方がよいです。半期の棚卸で”いつ”部品をもちだしたか 不明で数と資産金額が合わなくて大惨事になりました。 1000万は無いって。 すみません、質問させてください。 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 Excel2010 【3 VBAが使えるか .】 いいえ 【4 VBAでの回答の可否】 否 A1の数値を別のセルに 「.jpg」をつけて表示させたいのですが、どうしたらできますか? セルの書式設定のユーザー定義にもないし、入力件数が多くて困っています。 関数などがまったくわからなくて、ネットでも調べてみたのですが検索の仕方が悪いのか 見当違いのものばかりで…お力を貸してください。お願いします。 >>552 超初心者の俺がお答えしよう。 別のセルに、=a1&".jpg" と入力する >>552 別のセルに =A1&".jpg" と入力 =A1と書いて、書式設定のユーザー定義に0".jpg"と入力 =CONCATENATE(A1,".jpg")と入力 さぁ好きなのを選べ。 あと数値を・・ってことなので桁揃えするなら =TEXT(A1,"0000")&".jpg" としたり =A1と書いて、書式設定のユーザー定義に0000".jpg"と入力 という方法があるゾ 【1 OSの種類 .】 Windows7 【2 Excelのバージョン 】 2010 エクセルの計算効率についてです。 COUNTIFを使う場合 1列10万件のセルをカウントするのと 1列1万件のセルを個別に10列分カウントしてあとで10個の数を足すのとでは どちらが計算結果が早く出ますか? あと、あらかじめ条件外となるものは先に=""で空指定したほうが 計算結果が早く出ますか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる