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 >>729 (続き) ※ Power Query内の、1つのクエリー内であれば、 列を追加、番号を振る、重複を削除、値の置換、列を追加しての簡単な計算・・・ 等をそれぞれマクロのようにして順番に処理することが可能。 2つ以上のクエリーやテーブル(範囲)を合体させることも可能。 ※ Power Queryの関数は "M function" まだ、英語版の説明しかない模様。 https://docs.microsoft.com/ja-jp/powerquery-m/power-query-m-function-reference ・PQエディターを開いたところ https://i.imgur.com/0pC3TPn.png 右側の「適用したステップ」の一覧が、個別のマクロみたいなもの。 ・「詳細クエリー」画面の中身 https://i.imgur.com/vBHPEEr.png エディターのボタンメニューで操作した内容が、スクリプトになっている。 ステップの途中で列名を変更を挿入したりするとエラーが出るので、 ここで直接修正したり、とか。 (続く) >>729 (続き) C. この表の場合は、「地区」と「停電軒数」を1セットとして2列になっているので、 Excelのsheetの範囲を元にして再度PQで分割・合体したテーブルを作ってみた。 D. 後は文字列を数値化するのにはExcelの文字列関数の方が得意そうなので、 sheet内のC.のテーブルの右に列を追加してExcel関数処理とか。 こんな感じ。(深緑の列がsheet内で作業列を追加してExcel関数で処理した部分) https://i.imgur.com/1eQdwu2.png 後はExcelの3Dマップ使って棒グラフ作るとか。 こんなのとか。 https://i.imgur.com/Lj9hgtb.png 3Dマップも脚注などはまだ手動入力するしかなさそうだけど。 (続く) >>729 (続き) Power Pivotの方はまだ使ってみていないけれど https://i.imgur.com/Izmfl2c.png 自己流の手探りでPQだけ使ってみた Power Queryの泣き所は、 1. Webスクレイピング機能はあくまで簡易で、html記述まで入り込んでの指定は出来なさそう。 東電停電情報の場合は、一覧表の外の「データ更新日時」や「合計停電軒数」を指定出来ないため、手入力した。 → このあたりはPythonの方が得意か? 2. 1つのbook内で複数のクエリーがある場合、シーケンシャルに更新できない。 作った各クエリーは計算手順上、順番に再計算させたいのに、 個別のクエリーを指定して更新するか、全てのクエリーを更新するか、しかない。 後者の場合は同時並行で再計算してしまう模様。 → 確実にシーケンシャルに再計算させるには、今のところVBAかますしかないのかな? (終わり) エクセルで、やりたいことを調べるときってどうしてる? 例えば、この列に日付を表示させるとか >>769 「日付」って、>>767 の最初間画像の、「更新時刻」のこと? >>769 Excel 日付 表示 上から10来ぐらい検索結果開いて流し読み、無理ならここで聞く まぁもう聞くことはなくなったけどな >>764 =SUMPRODUCT((A2=A10:A20)*(B1=B9:G9),B10:G20) みたいなの覚えるだけでいいんだけどな >>772 それを自分で考え出せるようになるにはって話だ >>768 サンクス うちはvba禁止だからな 許可得たもの以外 新規はほぼ確実に無理と言われている バワークエリは禁止になるようそあるかな SUMPRODUCTって便利だってよく聞くから覚えようと思いつつ応用のさせ方がイマイチ分からず後回しになってる この機に覚えます! >>775 うーん・・・ VBAが出来ること全てをPQで出来るわけではなさそうだけど、 「VBAのようなプログラミング言語の文法を覚えなくても、作れるマクロ/いじれるマクロ」 という意味では、いけるかも? 大容量データを全て関数処理したら重くなる。 PQだと、小分けにしてステップを切れるのが良いところ。 ただし、今のところ更新は、手動で1つ1つ実行だし、 各ステップの分岐判断やループは出来なさそう。 他のbookからリンク参照するのは、ファイルのディレクトリや名前をいじるとすぐリンク切れるから、 それよりはPQでの修正はしやすい。 リンクだと、基本1セル。 PQだと、他のbookのテーブル/範囲まるごと、コピーしてくる感じ。 ただし、参照先のbookの最終更新時刻なんかのファイル属性を参照する関数が、 PQのそれには見当らないのは頂けない。 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 seleniumVBAを使ってchromeを操作しようとしたのですが、あるところでNot found elementエラーが起き、原因が不明です。 基本的に 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2013 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 seleniumVBAを使ってchromeを操作しようとしているのですが、あるところでNot found elementエラーが起き、原因が不明です ・F12でデベロッパーツールを表示して、操作したい要素のidやnameやXpathをコピーしているので、ここの誤入力はないと思います ・iframeやframeの中の要素でないことも確認しました ・フォーカスしているchromeのタブが間違っていないことも確認しました ・.wait()メソッドでwebページが表示しきるまで待機しました 何かアドバイスを頂ければと思います。 上記の質問に関連してなのですが、 Aframe Bframe-Cframe -Dframe 以上のような階層のframeがあったとして、A,B,Cframeの要素は、SwitchToFrameメソッドでframeを指定して取得することができました。 しかし、Dframe内の要素が取得できません。(element not found for・・・) このページに遷移する前に、ほぼ同じことをして、そこではうまく取得できているのですが・・・ 何故でしょうか 連投申し訳ございません。 >>779 seleniumはもう死んだのだ… seleniumはほぼ回答付かないので恐らく回答来ないと思う 知恵袋の方が回答付くかもよ >>782 seleniumが死んだというと、どういうことなのでしょうか・・・ 単純に古いということですか? >>770-771 サンクス あたいはEXELについてる皆で編集してるっぽいQ&Aしか見る機会無いから皆はネットで検索してるんですね 今時ネットで検索の仕方判らないってやばいぞ… つーかみんなで編集してるっぽいQ&Aってネットにあるやつじゃないのか >>768 > 1. Webスクレイピング機能はあくまで簡易で、html記述まで入り込んでの指定は出来なさそう。 > 東電停電情報の場合は、一覧表の外の「データ更新日時」や「合計停電軒数」を指定出来ないため、手入力した。 > → このあたりはPythonの方が得意か? このあたり、Power Queryの「HTML ページ」形式での読込み設定では 「地区ごとの一覧表」しか読み込めなかったんだけど、 あれから「もしや?」と思って、 PQの「Webから」の読込みで ・URLを指定するのは同じで ・「形式を指定してファイルを開く」を「テキスト ファイル」 ・「元のファイル」はどうやらエンコード指定みたいで、東電停電情報の場合、「10001: 日本語 (Mac)」だと、漢字が文字化けせず、よさげ。 https://i.imgur.com/JHHgcOm.png で取り込むと、htmlのスクリプトを各行Text形式で読めた。 https://i.imgur.com/9zYJHsP.png スクリプトの行番号等が改変されなければ、Pythonまで使わなくても、PQで同時に取り込めるかも。 B2〜L2を結合させたセルがあり、シートのF列だけを削除することはできるのですが、 マクロ記録で作った構文 Columns("F:F").Select Selection.Delete Shift:=xlToLeft を実行させると、B列からL列が消えていしまいます。 F列だけ削除するにはどうすればよいでしょうか >>788 Columns("F:F").Delete それとColumnsなら"F"だけでいい "F:F"とするならRangeでいい >>725 そうなんだけどね、シートに書き出したデータをもう一度テーブルとして使う時に、 範囲指定が必要になる場合があるんですよ。 自動的にセル名を定義する方法はありますか。 例えばA1セルに「野菜」と入力したら、 自動的にA1:A10の範囲が「野菜」セルと してセル名設定され、A1を「果物」変更 するとセル名も自動で変わるようにしたいです。 ブックAのシート1〜iまでのA1セルの数字を合計した数字をブックBのA1セルに転記したいです vbaでなんとかならないでしょうか? D2〜Gの4列中に含まれる"株式会社"・"有限会社"・"支店"を消す下の構文を作ったのですが 効果が同じシートの全てのセルに適応されてしまいます。D〜Gの範囲内に収めるにはどう書くのが正しいのでしょうか i = Cells(Rows.Count, 1).End(xlUp).Row Range("D2:G" & i).Select Cells.Replace What:="株式会社", Replacement:="" Range("D2:G" & i).Select Cells.Replace What:="有限会社", Replacement:="" Range("D2:G" & i).Select Cells.Replace What:="有限会社", Replacement:="" >>792 VBAでできる >>795 Cells.は全選択という意味 選択範囲はSelection. >>796 勉強になりました ありがとうございます >>796 >>792 です VBAじゃないと無理なんですね、ありがとうございました。 A列〜J列に空白のセルがあれば、そのセルの1つ上のセルをコピーする (A列の最終行まで繰り返す)ができるコードを教えてください。 *1行目と2行めは必ず値が入っています a列だけhttps://docs.microsoft.com/ja-jp/office/vba/excel/concepts/cells-and-ranges/fill-a-value-down-into-blank-cells-in-a-column Sub FillCellsFromAbove() ' Turn off screen updating to improve performance Application.ScreenUpdating = False On Error Resume Next ' Look in column A With Columns(1) ' For blank cells, set them to equal the cell above .SpecialCells(xlCellTypeBlanks).Formula = "=R[-1]C" 'Convert the formula to a value .Value = .Value End With Err.Clear Application.ScreenUpdating = True End Sub 最初のwithの後ろのcolumns(1)を range("a1:j200")みたいに操作したい範囲にすれば良いはず >>799 もう1列使えば、数式だけでいける A列が元データで、B列が空白を埋めたデータの場合 b2に"=if(IsEmpty(a2),b1,a2)"を入力して下向きにフィル >>803 >もう1列使えば そういうの回答として無意味 https://dotup.org/uploda/dotup.org1948859.zip.html このファイルでマクロを実行すると、自分の理解では「if k=3 and m=1 and Range(E10).Value <= m(=1)」となる瞬間が来て、、 G10セルはAになるはずなのですが、どうしてもすべてBになります どこが間違っているのでしょうか? >>805 一度Aになったあと、ループが進んで次の瞬間にBに書き換えられてる 【1 OSの種類 .】 Windows10 【2 Excelのバージョン 】 Excel2019 【3 VBAが使えるか .】 コピペだけできます。 【4 VBAでの回答の可否】 可 "元帳"というマクロを実行するBookの中に"請求一覧"というシートがあります そしてそのBook"元帳"と同じフォルダ内に、さらに"請求書"と言うフォルダがあり、その中に複数の.XLSファイルがあります。 その複数の.XLSファイルのそれぞれの"Sheet1"のA列〜K列の2行目から最終行(A列)までをコピーして シート"請求一覧"の最終行(A列)に貼り付けて追加していくコードをおしえてください。 また、マクロを実行する"元帳"bookが入っているフォルダアドレスは変動しますので、自動取得できるようにしていただけると助かります。 >>807 コピペだけを「使える」とは言わない Dim path As String Dim ws1 As Worksheet Dim wb As Workbook Dim ws2 As Worksheet With ThisWorkbook path = Dir(.path & "\請求書\*.xls") Set ws1 = .Worksheets("請求一覧") End With Do While path <> "" Set wb = Workbooks.Open(path) set ws2 = wb.Sheets("Sheet1") ws2.Range("a2:k" & ws2.Cells(Rows.Count, 1).End(xlUp).Row).Copy ws1.Range("a" & ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1) End With wb.Close (False) path = Dir() Loop >>808 Dim path As String Dim ws1 As Worksheet Dim wb As Workbook Dim ws2 As Worksheet With ThisWorkbook path = Dir(.path & "\請求書\*.xls") Set ws1 = .Worksheets("請求一覧") End With Do While path <> "" Set wb = Workbooks.Open(path) Set ws2 = wb.Sheets("Sheet1") ws2.Range("a2:k" & ws2.Cells(Rows.Count, 1).End(xlUp).Row).Copy ws1.Range("a" & ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1) wb.Close (False) path = Dir() Loop 試しに"請求書"フォルダに"20"・"25"・"30"というXLSファイルを入れて試したのですが 実行時エラー'1004': 申し訳ございません。20.XLSが見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。 がでて処理が止まります。 >>810 pathの中身はファイル名で、Workbooks.Openでpathの前にフォルダパス付け忘れてるわ xlsxは圧縮されているので、速度的に複数ファイルの読み取りには向いてないと思うんすよ。 代わりにxmlが良いんじゃないかと思うんすけど、どうっすかねぇ? そんなの気にするのは少数派? >>768 の > 2. 1つのbook内で複数のクエリーがある場合、シーケンシャルに更新できない。 について、どうやらそれらしい設定方法が分かったので報告。 各クエリーに設定される「接続のプロパティ (クエリ プロパティ)」のうち、 「バックグランドで更新する」 がデフォではONになっているので、 これをクエリーそれぞれで外せば、上から順番に計算しているっぽい。 https://i.imgur.com/K2oCmYx.png メニューの「データ−クエリと接続−すべての更新▼」リボンボタンの中にある 「接続のプロパティ」からアクセス。 紛らわしいが、「データ−プロパティ」からでない。 (こっちは「列幅を調整する」「新しいデータのセルを挿入し、使用されていないセルを削除する」などの設定) これで「すべての更新」ボタン押し一発(記録されたマクロ一回)で、 Excel関数で追加した計算も含めて、希望どおりシーケンシャルに結果が出た。 サンクス まず、うちのパソコンでエクセルを入れるとこからやってみるわ マクロでって言っているのにそれ以外の方法を示すのってなんなの? マクロでやる必要性が謎い質問だと関数でもできるが、というアドバイスは増えがち >>819 そんなハゲは発言をひかえていただきたい 質問者は基本的に言葉足らずなので関数を知らないのか敢えてのマクロなのか他人には判らない 回答者が多少気を遣ってアドバイスするとそうなってしまうのは仕方がない 蛇足だけど、 >>787 の 「Webから」データ取得して、html自体をテキストで取得する には、ちょっとコツが必要だった。 「Webから」で素直に表示されるダイアログ画面は、imgur画像の1枚目のような、 ・「形式を指定してファイルを開く」 ・「元のファイル」 (実質「エンコード」) のプルダウンメニューは含まれていない。 ところが、 1. 一度URLだけ入力して、PQが自動認識出来るクエリーをそのまま作らせる。 2. このクエリーのステップのうち、一番上の「ソース」を再度「編集」で開くと、1枚目の画像のようなダイアログが現れる。 一応、MSには「最初から選ばせてくれ」との改善要望を出しといた。 しつけーなPQが想定してる形態じゃねーんだよ 自分でコードかけクソが なんでweb上からテキストデータ取って来て解析までしなきゃなんねーんだよアホか 本当にこういう自分の思う通りじゃないからクソとかいってクレーム入れてくるクソ全員死なねーかな クソテキストでデータ提供する奴と一緒にはやく死滅してくれ クソに対応するためにMSに要望送れるとか神経疑うわ 自分がやべーことに全然気づいてないクソ中のクソ >>808 >>811 どの部分を直せばよいでしょうか? >>828 そこに書いてあるそのまんまなんだが… 継ぎ接ぎで悪いがWorkbooks.Open(ThisWorkbook.Path & "\請求書\" & path) 出版がどうこうとか完全に頭湧いてるな 出版社に迷惑かける前に病院行ってこい。精神科のあるデカいとこいけよ >>831 どこが頭わいてんだ みんな利用するようになると困るだろ もっとみんなのためになる話しよう!!VBAとか関数とか!! 「みんなのためになる」だろうと思って PQ話をしたつもりだったんだけどな。 別に既存のVBAや関数と排他ではない、追加機能だし。 IPも安価も無いから誰が誰に言ってるのか全然わからない ああ、萎えたわ。 たかが5chのスレの中で、 マウンティングしてポジション取りしか考えてない 田吾作相手じゃ、やってられんわ。 内閣府ウェブサイトの祝日csvっていつから1955年〜2020年になってたんだろう >>844 2019/10/22が祝日に決まったタイミングで変わった 【1 OSの種類】 Windows10 【2 Excelのバージョン 】 Excel 2016 【3 VBAが使えるか】いいえ 【4 VBAでの回答の可否】 否(VBAが必要そうなら勉強します) セルに4桁の銘柄コードを入力すると、別のセルに株価が表示できるようにしたいです http://enjoyjob.net/wp/2018/04/27/excelformula01/ が使えるかと思ったのですが、 このサイトの通りA2に銘柄コード、B2〜D2に数式をいれても、 「この数式には問題があります」というメッセージが出るだけでした >>847 例文は"が全角になってるが半角で入ってる? >>848 ありがとうございます まさか例文が間違っていたとは… B列、C列については、ご指摘の部分の修正で動作しました 肝心のD列はやはり「この数式には問題があります」と出ます ダブルクォーテーションマークは全てチェックしたつもりですが… 正直、関数の内容はあまり理解出来てないのですが、そもそもB列で所得した情報にsummary-numberが含まれていない気がします >>849 D列でその野村のページのどの数値を取りたいん? >>850 株価の現在値です B2で>>849 の修正をしたとして、A2に「8698」を入力すると D2にはB2に含まれる「335」を抽出したいです すいません、自己解決しました C列のやり方を参考に、株価の現在値の前後の固有の単語から何文字を抜き出す、 というやり方で出来ました 教えて頂いた方、ありがとうございました ヘッダーに日付を入れたいのですが、このページ数の文字を大きくする(20くらい) にはどう書けばよいでしょうか? .LeftHeader = "&P/&N" あるブックの「=A1&"aaa"」と入ったセルをvba で別ブックにcopyするとaaaと転記されてしまいます =A1の部分も反映させるにはどうしたらいいでしょうか? >>858 コピーせずにそのセルのFormulaに入れる GI列の最終行の値を、下に向かってコピー A列の最終行と同じ行までコピーするVBAをお願いします。 A GI ***.....** ***.....** ***.....** ***..... ***..... ***..... ***..... ***..... ↓↓↓↓↓↓↓↓ A GI ***.....** ***.....** ***.....** ***.....** ***.....** ***.....** ***.....** ***.....** >>860 GI列の最終行の値を、下に向かってコピー A列の最終行と同じ行までコピーする dim cnt cnt =[a10000].end(xlup).row-[GI10000].end(xlup).row if cnt>1 then [GI10000].end(xlup).offset(1).resize(cnt).value = _ [GI10000].end(xlup).value end if すでにIEのダウンロードダイアログが開いた状態で、VBAで任意のフォルダを選択して保存するにはどうしたらいいでしょうか? 任意のフォルダなんか選択しなくていい。 ファイル名書く所に、パスごと書き込む。 WindowsAPIでね。 >>864 Windows APIがよくわかっていなくて、みんな大嫌いsendkeysしか思いつかないのですが・・ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる