X



Excel VBA 質問スレ Part61

■ このスレッドは過去ログ倉庫に格納されています
0175デフォルトの名無しさん (ワッチョイ c2bc-sMnz)
垢版 |
2019/05/05(日) 23:12:10.31ID:BF8MV8/50
ありがとう、皆さん。お言葉に甘えて
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'
となります。
0178デフォルトの名無しさん (ワッチョイ c2bc-sMnz)
垢版 |
2019/05/06(月) 00:20:05.87ID:50ISOOVP0
>>176
遅くにありがとうございました。

ご指摘のとおり、iに0が入るため、エラーになっていることがわかりました。

後は、空白セルを0と読み取らせない方法を調べてみます。

丸二日、エラーの理由がわからずに悩んでいました。

見ず知らずの方に助けてもらえて感謝です。ありがとうございました。
0181デフォルトの名無しさん (スッップ Sd02-tw1J)
垢版 |
2019/05/06(月) 10:29:14.43ID:ZwYgATzZd
>>178
初心者は、問題がどこにあるのかに勘所が無いからこういう悩んで時間を使う経験をたくさんすると良い。
慣れれば5秒で気付く。

あと、Do〜Loopはいらない気がする。
hの代わりにiを使ってどうにかできると思うね。
0183デフォルトの名無しさん (ワッチョイ 9f71-ItfN)
垢版 |
2019/05/10(金) 16:54:45.46ID:SsAAf7AE0
VBA勉強中の者です。

Setステートメントを勉強しているのですが、オブジェクト型についてお聞きしたいです。RangeオブジェクトとかWorksheetオブジェクトなど、いろんなサイトなど見ても使いどころがよくつかめてないです。

どんなときに使うのか、教えてもらえるとありがたいです。
0185デフォルトの名無しさん (ワッチョイ 3735-y0Vo)
垢版 |
2019/05/10(金) 17:04:22.66ID:/nmPTcfU0
どんなときに使うのか、は一言で言うのは難しいが、基本的には保守のため

・何の変数か分からない時に名前をつける
range("a1:b2")だと何の範囲かはワークシート見ないと分からない
set 転記元 = range("a1:b2")
とすることで、そのrangeが何か一発で分かるようになる

ちなみに「何をするか」ではなく「何が入ってるか」を基準に命名すると後で分かりやすい
「何をするか」はfunctionの名前がそうなっているはずだ

・ある変数が2回以上登場する場合、最初に変数に入れておけばそのコードを変更する時に一回で済む
まぁこれは説明せんでもええわな

・保守しないならめんどくさいだけじゃん
そう、合っている
ちゃんと保守できるように書いて置いた方が、長い目で見ると楽なんだ。プラマイプラス
0186デフォルトの名無しさん (スップ Sd3f-VdvG)
垢版 |
2019/05/10(金) 19:25:57.30ID:ZL9lN1sfd
>>184、185
レスありがとうございます。
185さん
感覚ですが、すごく単純な感じがします。そんな認識でよいです?

ただ184さんのいう
数値と文字列以外は全部オブジェクト
これがひっかかるんです。

range("a1:b2")がオブジェクトという認識でよい?
そのなかに文字があった場合は?
文字列じゃない?と思ってしまうが、それは違うんですよね。
仮に
range("b2").valueだった場合は値で、range("a1:b2")はオブジェクトという事?

はなしがまとまってなくて、すみません。
0188デフォルトの名無しさん (ワッチョイ ff63-gMth)
垢版 |
2019/05/10(金) 19:40:34.80ID:tGc5sWC60
Excelのシート内部の表位置とかカラム位置とかデータ末尾とか特定するベストプラクティスってどんなんですか!

何十年前からある言語でこんだけ普及してるのにいまだに決まった答えがないとか
0191デフォルトの名無しさん (ワッチョイ 3735-y0Vo)
垢版 |
2019/05/10(金) 20:14:31.04ID:/nmPTcfU0
>>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)
0193デフォルトの名無しさん (スップ Sd3f-VdvG)
垢版 |
2019/05/10(金) 21:34:51.98ID:ZL9lN1sfd
>>191
レスありがとうございます
誘導もありがとう!
じっくり読んでみます。
わからない所があったらまた聞くかもです。
中途半端な理解は嫌だし。さっかりと理解したいし。
0200デフォルトの名無しさん (アウアウウー Sa1b-ScLU)
垢版 |
2019/05/11(土) 21:36:03.53ID:pbKNvvnGa
質問です。
NumberFormatLocal = “yyyy””年””m””月””d””日””(aaa)”で書式の定義を変更しています。
NumberFormatLocal = ●“yyyy””年””m””月””d””日””(aaa)”

●の箇所に文字列を入れたいのですが”●”を入れるとエラーになります。解決方法はありますでしょうか?
0202デフォルトの名無しさん (ワッチョイ 3735-y0Vo)
垢版 |
2019/05/11(土) 21:46:39.70ID:VQwnSTgG0
マクロの記録取ってみたわ
ダブルコーテーションで括った中で、更にダブルコーテーションがいるっぽい
具体てt機にはこう

Selection.NumberFormatLocal = """あ""yyyy""年""m""月"""
0204デフォルトの名無しさん (ワッチョイ d7da-y0Vo)
垢版 |
2019/05/12(日) 02:13:17.21ID:anQ1bE+S0
もしかして、Access2016が入ってると、
Excel2013ではADO接続使えない?

Excel2013からAccess2016の参照で落ちるケースはググって見つけたけど、
ウチのはExcel2013からExcel2013で落ちる。
0205デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 02:35:46.96ID:0u/cIV/f0
>>190
データとしてExcelを使う場合と、ドキュメントとしてExcelを使う場合とで、考え方がかわる。
0209デフォルトの名無しさん (ワッチョイ d7da-y0Vo)
垢版 |
2019/05/12(日) 17:19:48.24ID:anQ1bE+S0
>>208
Excel2013 ・・・ ADO接続OK
   ↓
Excel2013 + Access2016 ・・・ ここで突然落ちるようになる
   ↓
Excel2019 + Access2016 ・・・ 直った!

全部32bit。
本当は64bitにしたかったけど、ListViewとか、
一部使えなくなる機能があるので諦めた。
0210デフォルトの名無しさん (ワッチョイ d7da-y0Vo)
垢版 |
2019/05/12(日) 17:21:42.38ID:anQ1bE+S0
あ、Excel2013 + Access2016って、インストールの組み合わせ。
別に、Excel2013からAccess2016に接続しに行ったわけじゃない。
落ちたのは、Excel2013からExcel2013へのADO接続。
0211デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 17:23:44.21ID:0u/cIV/f0
なんの話をしているのか他人にはさっぱりわからないw
0217デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 20:06:16.73ID:0u/cIV/f0
プログラミングの初歩は大事なんだと思ったよ。

ある値のときは00時00分00秒にするという分岐を思いつかないんだから。
0220デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/12(日) 22:49:25.28ID:0u/cIV/f0
>>210
Office製品は基本的にバージョン違いを混在させられるようにはできていない。
0223デフォルトの名無しさん (ワッチョイ b791-vKCg)
垢版 |
2019/05/13(月) 09:19:29.85ID:OGTR1ISy0
その前にいきなり時刻とか言い出した辺りでダメダメ。
人間が時刻と思ってるだけの可能性がある。

セルの書式や変数の型を元に説明しないのは、人間の目線で時刻と言ってる証拠。
0227デフォルトの名無しさん (ブーイモ MMbf-wbL8)
垢版 |
2019/05/13(月) 17:03:08.67ID:P7TvqqIDM
>>226
ちゃんと形式を整えておけば単純なSELECTなら使える
WHEREが機能するだけでOKってことならまあまあかな
JOINとかは当てにならないような気がする
DELETE, INSERT, UPDATE はもっと当てにならない
0229デフォルトの名無しさん (アウアウクー MM8b-BEL3)
垢版 |
2019/05/13(月) 20:44:43.21ID:/95lNMvTM
>>228
他人だけど、ExcelのSQL操作はおまけ機能だから、標準SQLに対応してないから、やってみないとわからない。
0233デフォルトの名無しさん (アウアウクー MM8b-BEL3)
垢版 |
2019/05/13(月) 21:10:27.82ID:/95lNMvTM
>>232
バージョンを気にしてくださいw
0234デフォルトの名無しさん (ワッチョイ d7da-y0Vo)
垢版 |
2019/05/13(月) 22:16:41.75ID:ErXZ/V3c0
>>226
出来るよ。
普通はやらないだろうけど、会社のPCにAccessが入ってないとか、
Accessは入ってるけど、事務のおばちゃんがExcelにしがみついて、
意地でも離さないとか、そういう状況で使える。

>>227
JOINは普通に使える。
0237デフォルトの名無しさん (ワッチョイ 9fa2-vVMj)
垢版 |
2019/05/13(月) 23:39:26.70ID:N0Eopnbu0
エクセルでできるってすごい!
そこで疑問に思ったんですが以下の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の方法は?

教えてください<(_ _)>
0238デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/13(月) 23:43:46.08ID:4/CDP/BQ0
秀和システムでいいから、古本を買って読めよw

ちゃんとサンプルが書いてある。アマゾンの古本は激安だぞ。
0241デフォルトの名無しさん (ワッチョイ 375f-BEL3)
垢版 |
2019/05/13(月) 23:49:20.76ID:4/CDP/BQ0
>>239
Google検索でもサンプルは山のようにあるぞ。
0243デフォルトの名無しさん (ワッチョイ d7da-y0Vo)
垢版 |
2019/05/14(火) 00:15:14.20ID:a29jNOd40
>>237
何通りかあったと思うけど、
その書き方だと[Sheet1$]かな。

プロバイダーも、adoCn.Providerにも、adoCn.Openにも書ける。
ブック名をFromの後に書く方法もある。

組み合わせは忘れたけど、どこかで指定していれば、
別の部分では省略できる感じ。
0245デフォルトの名無しさん (ササクッテロ Sp8b-GQZr)
垢版 |
2019/05/14(火) 19:07:26.92ID:wEGsmpoqp
https://dotup.org/uploda/dotup.org1847293.xlsx.html
東京・大阪・北海道の各出発時間・到着時間を黄色い部分に「sendkeysで」、「それぞれ東京・大阪・北海道の順序を守って」入力したいです
実際にsendkeysでキーを送るのはブラウザ上のフォームであり、東京の時刻入力→tabとenterをsendkeyしつつ次のページに移動→大阪を入力、という風に処理するため、順序等が変更できません
また入力するのが東京・大阪・北海道だけでないかもしれないので、記載がある行すべてというイメージでお願いします

excelスレでも質問してみてますが、vba専門スレがあることに気付かされたのでこちらでお世話になります
0252デフォルトの名無しさん (ワッチョイ 1701-Fjsy)
垢版 |
2019/05/14(火) 21:59:36.21ID:IyB4HHSk0
>>251
別窓にしちゃう(なっちゃう)とそのウィンドウを探して、html取ってくることが必要になるので、できるなら避ける。

IE VBA
でググれば、参考サイト出てくる。あとは応用しだい
IEでは F12で開くやつも有用

がんばれ
0256デフォルトの名無しさん (オッペケ Srea-SJOa)
垢版 |
2019/05/16(木) 11:39:56.68ID:a1IyAHl+r
excelマクロでのバージョン管理てどうすればいいん
言われるがままに集計マクロ作ったら担当者毎に持ってるマクロのバージョン違ってあの機能が無いとか特殊な状況でエラー出る→それ先月直しましたよ
が頻発してる
0261デフォルトの名無しさん (ワッチョイ b0f1-tIz5)
垢版 |
2019/05/16(木) 14:43:29.72ID:wWtnEH3A0
コード書く画面を
背景は黒に、文字は白に、する方法を教えれ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況