Excel VBA 質問スレ Part61
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part60 https://mevius.5ch.net/test/read.cgi/tech/1552736349/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured Dim i As Integer i = InputBox("数字を入力してください") Rows(i).Insert Shift:=xlDown 皆さん、ありがとう 試して報告させていただきます。 >>164 nをfor next で指定しても、動きますか? エラーとなり、理由がわからず2日ここで止まってます。 コードも無いしエラーメッセ−ジも無いからエラーはよく分からんが、気になる点を1つ。 n行目に挿入されると、その行は何行目になるのかな? >>169 具体的に何行目に追加したいか書いたほうが良いと思う 一行だけじゃないのか >>169 たぶん For に Step - が必要な案件と見た >>169 いっぺんに何行も挿入したいときは Rows("6:15").Insert この例では5行と6行の間に10行いっぺんに入れて、元の6行が16行に移動してる >>172 初めて挿入やった時に上から順に挿入してってぐっちゃぐちゃになったわw ありがとう、皆さん。お言葉に甘えて Sub 行の挿入() dim k As Integer dim i As Integer dim j As Integer dim h As Integer Set obj基本データ = Thisworkbook.Worksheets("基本データ") h = 7 Do while obj基本データ.Cells(4,h).Value〈〉"" For i = 1 To obj基本データ.Cells(5, h).End(xlDown).Row k = obj基本データ.Cells(4,h).Value j = obj基本データ.Cells(i+4,h).Value ThisWorkbook.Worksheets(k+2).Rows(j).Insert next i h = h + 1 Loop End Sub 回すと、 ThisWorkbook.Worksheets(k+2).Rows(j).Insert のところで、実行時エラー'1004' となります。 >>175 構文はあってるけど、存在しないセルを参照している 多分jに0か、kに-2が入ってるとかそんな感じ 変数の中身を確認して 確認方法はウォッチ式、イミディエイトウィンドウなどいろいろあるけど msgbox j msgbox k ThisWorkbook.Worksheets(k+2).Rows(j).Insert でも良い >>176 遅くにありがとうございました。 ご指摘のとおり、iに0が入るため、エラーになっていることがわかりました。 後は、空白セルを0と読み取らせない方法を調べてみます。 丸二日、エラーの理由がわからずに悩んでいました。 見ず知らずの方に助けてもらえて感謝です。ありがとうございました。 >>176 IF j=0 then GoTo L1 を追加して、 エラーになるところを飛ばして解決しました。 ありがとうございました。 >>178 初心者は、問題がどこにあるのかに勘所が無いからこういう悩んで時間を使う経験をたくさんすると良い。 慣れれば5秒で気付く。 あと、Do〜Loopはいらない気がする。 hの代わりにiを使ってどうにかできると思うね。 VBA勉強中の者です。 Setステートメントを勉強しているのですが、オブジェクト型についてお聞きしたいです。RangeオブジェクトとかWorksheetオブジェクトなど、いろんなサイトなど見ても使いどころがよくつかめてないです。 どんなときに使うのか、教えてもらえるとありがたいです。 どんなときに使うのか、は一言で言うのは難しいが、基本的には保守のため ・何の変数か分からない時に名前をつける range("a1:b2")だと何の範囲かはワークシート見ないと分からない set 転記元 = range("a1:b2") とすることで、そのrangeが何か一発で分かるようになる ちなみに「何をするか」ではなく「何が入ってるか」を基準に命名すると後で分かりやすい 「何をするか」はfunctionの名前がそうなっているはずだ ・ある変数が2回以上登場する場合、最初に変数に入れておけばそのコードを変更する時に一回で済む まぁこれは説明せんでもええわな ・保守しないならめんどくさいだけじゃん そう、合っている ちゃんと保守できるように書いて置いた方が、長い目で見ると楽なんだ。プラマイプラス >>184 、185 レスありがとうございます。 185さん 感覚ですが、すごく単純な感じがします。そんな認識でよいです? ただ184さんのいう 数値と文字列以外は全部オブジェクト これがひっかかるんです。 range("a1:b2")がオブジェクトという認識でよい? そのなかに文字があった場合は? 文字列じゃない?と思ってしまうが、それは違うんですよね。 仮に range("b2").valueだった場合は値で、range("a1:b2")はオブジェクトという事? はなしがまとまってなくて、すみません。 Excelのシート内部の表位置とかカラム位置とかデータ末尾とか特定するベストプラクティスってどんなんですか! 何十年前からある言語でこんだけ普及してるのにいまだに決まった答えがないとか >>188 あのね、A1から使うのがExcelの正しい使い方なの 枠やらタイトルやら付けるのはバカジャップの間違った使い方なの >>186 range("a1:b2")はオブジェクト。この中にプロパティとしてvalueやwidth、heightなどがある もちろんrange("a1:b2").valueは文字列。 range("a1")に1が入っていて range("a1")+2が3になるのは、range("a1:b2").valueが自動的に呼び出されて range("a1").value+2になっているため MSDNじっくり読んだほうがいいかもな https://docs.microsoft.com/ja-jp/office/vba/api/excel.range (object) >>188 最強はこのページの <S6> 書式付きセルを除外する (UsedRange) http://www.niji.or.jp/home/toru/notes/8.html ケツから検索して見つかった奴が最後 >>191 レスありがとうございます 誘導もありがとう! じっくり読んでみます。 わからない所があったらまた聞くかもです。 中途半端な理解は嫌だし。さっかりと理解したいし。 プログラミングを理解するには、読むだけでなくとにかく実際に動かしてみることが大事 >>194 そうですよね やらないとわからないがほとんどです(T-T) >>195 脳内変換ヨロシクです ADO使うと突然落ちるようになった。 何が原因J? >>198 Microsoft.ACE.OLEDB.12.0 PCによっては普通に実行できるので、原因がわからん。 質問です。 NumberFormatLocal = “yyyy””年””m””月””d””日””(aaa)”で書式の定義を変更しています。 NumberFormatLocal = ●“yyyy””年””m””月””d””日””(aaa)” ●の箇所に文字列を入れたいのですが”●”を入れるとエラーになります。解決方法はありますでしょうか? >>200 わからんけど、自動記録でやったものをコピペするとか。 マクロの記録取ってみたわ ダブルコーテーションで括った中で、更にダブルコーテーションがいるっぽい 具体てt機にはこう Selection.NumberFormatLocal = """あ""yyyy""年""m""月""" >>201 解決しました。ありがとうございました。 もしかして、Access2016が入ってると、 Excel2013ではADO接続使えない? Excel2013からAccess2016の参照で落ちるケースはググって見つけたけど、 ウチのはExcel2013からExcel2013で落ちる。 >>190 データとしてExcelを使う場合と、ドキュメントとしてExcelを使う場合とで、考え方がかわる。 >>204 win下をdll検索して、複数見つかったらそれぞれ直接参照設定してみるとか (単体で動いてるわけじゃない気もするから、期待薄かもしれんけど) >>206 それもダメだったから、諦めてExcel2019買ったわ。 それだと普通に動いたから、 やっぱりExcel2013とAccess2016の組み合わせがダメだったみたい。 ありがとう。 >>208 Excel2013 ・・・ ADO接続OK ↓ Excel2013 + Access2016 ・・・ ここで突然落ちるようになる ↓ Excel2019 + Access2016 ・・・ 直った! 全部32bit。 本当は64bitにしたかったけど、ListViewとか、 一部使えなくなる機能があるので諦めた。 あ、Excel2013 + Access2016って、インストールの組み合わせ。 別に、Excel2013からAccess2016に接続しに行ったわけじゃない。 落ちたのは、Excel2013からExcel2013へのADO接続。 なんの話をしているのか他人にはさっぱりわからないw 時刻がマイナスの場合 とは、if文でどうやってつくりますか? >>212 マイナスの時刻など存在しない If 1 = 2 A−B=C 時刻の差のCがマイナス表示されるセルを if文で 00:00:00 に直したいです >>214 =TEXT(MAX(0, C), "hh:mm:ss") VBAは要らん プログラミングの初歩は大事なんだと思ったよ。 ある値のときは00時00分00秒にするという分岐を思いつかないんだから。 まあMIN/MAXを使って値をキャップするのは正統なプログラミングでは非常によく使われる方法だけど、 事務屋さんには意外と思いつかないかもね 普通に時刻どうしで比較できるから、3分前とかそういうことかと思ってた >>210 Office製品は基本的にバージョン違いを混在させられるようにはできていない。 その前にいきなり時刻とか言い出した辺りでダメダメ。 人間が時刻と思ってるだけの可能性がある。 セルの書式や変数の型を元に説明しないのは、人間の目線で時刻と言ってる証拠。 VBAでは時刻と時間を Timeでずっとやり繰りしてたのに、c#で TimeSpan発見したときは叫んだわ え?エクセルをADOでデータベースみたいに扱うこともできるの? >>226 ちゃんと形式を整えておけば単純なSELECTなら使える WHEREが機能するだけでOKってことならまあまあかな JOINとかは当てにならないような気がする DELETE, INSERT, UPDATE はもっと当てにならない >>228 他人だけど、ExcelのSQL操作はおまけ機能だから、標準SQLに対応してないから、やってみないとわからない。 >>229 馬鹿は死ねや Accessのエンジンと同じだろ >>226 出来るよ。 普通はやらないだろうけど、会社のPCにAccessが入ってないとか、 Accessは入ってるけど、事務のおばちゃんがExcelにしがみついて、 意地でも離さないとか、そういう状況で使える。 >>227 JOINは普通に使える。 >>234 そうか、JOINも普通にできるのか... 「Excelもデータベースとして有効に使えるよね」なんて方向に行って欲しくない、という願望が 俺の心の中にバイアスを生んだようだ というかPowerQueryやDAXでデータベース的な使い方が出来てしまうからな今のExcelは エクセルでできるってすごい! そこで疑問に思ったんですが以下のVBA書いてみましたが Dim adoCn As Object Dim adoRs As Object Dim strSQL As String Dim DBpath As String DBpath = ThisWorkbook.Path Set adoCn = CreateObject("ADODB.Connection") Set adoRs = CreateObject("ADODB.Recordset") adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & DBpath & "\SampleData.xlsx;"←@ strSQL = "select A,B,C from シート名 order by A desc" ←A adoRs.Open strSQL, adoCn *何か処理 adoRs.Close adoCn.Close 'コネクションのクローズ Set adoRs = Nothing 'オブジェクトの破棄 Set adoCn = Nothing @について プロバイダーとファイル指定の記述の仕方はあってますか? Aについて 列の指定とfromの方法は? 教えてください<(_ _)> 秀和システムでいいから、古本を買って読めよw ちゃんとサンプルが書いてある。アマゾンの古本は激安だぞ。 エクセルをデータベースとして使う記述があるのがどの本なのかさっぱり・・・ できれば本教えてもらえませんか? >>239 Google検索でもサンプルは山のようにあるぞ。 >>237 何通りかあったと思うけど、 その書き方だと[Sheet1$]かな。 プロバイダーも、adoCn.Providerにも、adoCn.Openにも書ける。 ブック名をFromの後に書く方法もある。 組み合わせは忘れたけど、どこかで指定していれば、 別の部分では省略できる感じ。 https://dotup.org/uploda/dotup.org1847293.xlsx.html 東京・大阪・北海道の各出発時間・到着時間を黄色い部分に「sendkeysで」、「それぞれ東京・大阪・北海道の順序を守って」入力したいです 実際にsendkeysでキーを送るのはブラウザ上のフォームであり、東京の時刻入力→tabとenterをsendkeyしつつ次のページに移動→大阪を入力、という風に処理するため、順序等が変更できません また入力するのが東京・大阪・北海道だけでないかもしれないので、記載がある行すべてというイメージでお願いします excelスレでも質問してみてますが、vba専門スレがあることに気付かされたのでこちらでお世話になります だから、Sendkeysはやめろって。 これはお手軽にその場だけデータを取りたい時なんかに使うけど、制御出来ないから普通は使うべきじゃない。 もちろんそうなんですが自分には IE操作は敷居が高くて、愚直も愚直にsendkeysしか手段が思いつかないもので・・何か代替案ございますか? inputに文字列入れるだけだろ? ソース見てidだかclassだか取得してポイって入れるだけじゃん それがよーわからんのです・・ とりあえずググってすぐ見つかるサイトで特に初心者にわかりやすい解説してるサイトでも教えていただけませんか? IE操作で頑張ってみてるんですが、リンクオープンして開いた別窓を操作するにはまたhtmldocにobjIE.documentを代入して・・ってしないといけないんですか? >>251 別窓にしちゃう(なっちゃう)とそのウィンドウを探して、html取ってくることが必要になるので、できるなら避ける。 IE VBA でググれば、参考サイト出てくる。あとは応用しだい IEでは F12で開くやつも有用 がんばれ >>252 社内システムなので必ず別窓になっちゃう仕様です htmlの取り方教えてもらえませんか? >社内システムなので 多分、このスレ見てる全員ズコーだわ、そのオチ。 システム部門の人に聞いちゃダメなんかい。 CreateObject("Shell.Application").Windows() から探す excelマクロでのバージョン管理てどうすればいいん 言われるがままに集計マクロ作ったら担当者毎に持ってるマクロのバージョン違ってあの機能が無いとか特殊な状況でエラー出る→それ先月直しましたよ が頻発してる >>256 サーバー上にマクロ専用のエクセルファイルを置いて、 個々に配っているファイルからはそのマクロを参照させる >>257 基本それだが、ずっと掴んでるやつがいるとバグ修正や機能追加のときに困る コード書く画面を 背景は黒に、文字は白に、する方法を教えれ >>256 OS起動したら、サーバからコピーしてくるバッチ等を走らせる 小さいならいちいちバージョン確認しなくてもよい みんな一々シャットダウンするのか? スケジュールでコピーだろ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる