Excel VBA 質問スレ Part63

■ このスレッドは過去ログ倉庫に格納されています
2019/09/16(月) 19:34:59.04ID:emfTAhXr0
!extend:checked:vvvvv:1000:512

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part62
https://mevius.5ch.net/test/read.cgi/tech/1561303297/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/09/16(月) 19:37:44.33ID:oeAiWNxe0
ぽこちん
2019/09/16(月) 20:59:24.42ID:dQXELjkB0
ちんぽこ
2019/09/16(月) 21:35:06.62ID:umLXld9Q0
おつちん
2019/09/16(月) 21:37:35.26ID:+LXKkUCe0
糞レスで埋めるなら前スレのCSVファイルをQueryTablesで読むサンプル残しとく超参考になった
967 デフォルトの名無しさん (ワッチョイ 1fce-Nl8y) sage ▼ New! 2019/09/13(金) 00:48:49.27 ID:VS8vqVEc0 [1回目]
文字列として読み込めば0は消えない
あとLineInputよりクエリのがずっと速い

サンプル

Sub CSVread()
  With Worksheets("Sheet1") '読み込むシート
  With .QueryTables.Add(Connection:="TEXT;C:\tmp\test.csv", Destination:=.Range("A1")) 'ファイル名とセル位置
    .TextFilePlatform = 932 '文字コード指定
    .TextFileCommaDelimiter = True 'カンマ区切り指定
    .RefreshStyle = xlOverwriteCells 'セルに上書き
    .TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat) '各列を文字列に指定
    .Refresh 'シートに読み込んで表示
    .Delete 'クエリを切断
  End With
  End With
End Sub
2019/09/16(月) 21:50:00.95ID:oeAiWNxe0
ぽこちん
7デフォルトの名無しさん (ワッチョイ 9f8e-J3NS)
垢版 |
2019/09/16(月) 22:04:26.30ID:mBMfeEcT0
全部丸投げの教えてクレクレは死ね
2019/09/17(火) 00:12:51.48ID:QL/1GsWjx
LongLong型に定数値として4,294,967,296を与えておきたいのですがLongの範囲を超えているせいか、必ず後ろに#が付いてしまいます
用途としては強引にunsigned Long的に使う為のオフセットなのですが#を付けない方法はありますか?
2019/09/17(火) 00:26:07.74ID:dEY9k2Om0
Verylong型
2019/09/17(火) 01:14:04.05ID:chWRxzLY0
ちんぽこ
2019/09/17(火) 05:14:20.51ID:x3oFyaLA0
>>8
式は書けないんだったっけ…
2019/09/17(火) 12:34:56.30ID:WreyM4md0
LongPtr
2019/09/17(火) 19:25:37.80ID:gAW2iwiH0
前スレの最後でセルに色をつけるコードを作って頂いた者です。職場で試してみましたが思い描いた通りに動いてくれました!これを機に自分で作れるように勉強したいと思います。作って下さった方、本当にありがとうございました…!
2019/09/17(火) 19:44:50.07ID:1jOFcYgS0
ぽこちん
2019/09/17(火) 22:00:10.80ID:g2VoYh6px
スレチなのは分かってるけど詳しい人がここにしかいなさそうだから、もし知っていたら教えてほしい

ブックに保存されたクエリをOLAP等で使い回すためにODCファイルとしてエクスポートしたいんだが、「既存の接続」コマンドからクエリのプロパティを開いても「接続のエクスポート」のボタンが無効になっていてうまくエクスポート出来ない
どうしたらうまくエクスポートできるのか知りたい
2019/09/18(水) 00:53:52.38ID:2k/sPvaQ0
珍ぽこりん
17デフォルトの名無しさん (ワッチョイ 9f64-+dKN)
垢版 |
2019/09/18(水) 02:08:49.51ID:IoDIi0WV0
すみません。
エラーが分からず・・・教えてください。

下記コードで、”型が一致しません”というエラーが出ています。

Dim Ringi1 As Worksheet
ThisWorkbook.Activate
Set Ringi1 = Workbooks(Range("B6")).Worksheet("Sheet1")  ←エラー

ThisworkbookのB6には”テストファイル.xlsx”が入っています。

よろしくお願いします。
2019/09/18(水) 02:37:53.20ID:6F01cvXOx
>>17
Worksheet(Range("B6"))じゃなくてWorksheets(Range("B6").Value)でしょう

あとRange("B6")はどのシートのB6セルなのかな?
この書き方だとThisWorkbookがActivateされたときにアクティブになってるシートのB6セルが参照されてしまうので、ちゃんとシートを指定して書いたらどうかな
例えばThisWorkbookの一番目のシートのB6セルにファイル名が書かれている前提ならこうなる

Dim Ringi1 As Worksheet
ThisWorkbook.Activate
Set Ringi1 = Application.Workbooks(ThisWorkbook.Worksheets(1).Range("B6").Value).Worksheets("Sheet1")
2019/09/18(水) 06:35:56.16ID:2k/sPvaQ0
ポコポコてぃんてぃむ
2019/09/18(水) 07:18:06.31ID:Sjvl4q9oM
>>8
つけないのは無理だったと思う
今スマホだから試せないけど # が嫌というだけなら ^ ではどうかな?
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/longlong-data-type
2019/09/18(水) 19:03:21.51ID:2k/sPvaQ0
てぃむてぃむ
2019/09/18(水) 22:18:32.08ID:TxLlA7PYp
ブックAのシート1〜iまでのA1セルの数字を合計した数字をブックBのA1セルに転記したいのですが、どう書けばいいでしょうか?
2019/09/18(水) 22:31:17.98ID:ZRtblFe80
>>22
マルチポストはやめよう
2019/09/19(木) 00:39:56.20ID:oPZRSehu0
VBAのエディタに未だに慣れない・・・visual studioみたいな至れり尽くせりな開発環境があればなぁ
2019/09/19(木) 00:47:56.32ID:ARAzw0xg0
>>24
アドオン入れるなり作るなりするとマシになる
2617 (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 01:19:41.82ID:vxcA2ILs0
>>18
コードをヒントにして、成功しました!
ありがとうございました。

めっちゃお優しいですね!!
2019/09/19(木) 05:46:15.64ID:0eG7NBUp0
あいうえお
2019/09/19(木) 07:26:47.06ID:F8eVIa9Rp
>>23
初めてなので許してください
そして教えてください
2019/09/19(木) 08:12:52.96ID:wmMzcbeOd
>>25
オススメ教えて
2019/09/19(木) 08:47:06.93ID:0eG7NBUp0
かきくけこ
31デフォルトの名無しさん (ブーイモ MMf6-zDIv)
垢版 |
2019/09/19(木) 12:51:43.71ID:sRgRNGS8M
なにぬねの
2019/09/19(木) 14:11:18.92ID:I3ATuKNad
>>22
ブックAのシートでループ
33デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/19(木) 14:27:24.46ID:nfvzk0j90
>>28
死ね、馬鹿
2019/09/19(木) 14:54:49.69ID:F8eVIa9Rp
>>33
うるせえウンコマンクソして寝ろ
35デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/19(木) 15:37:32.90ID:nfvzk0j90
馬鹿の本性なんてこんなもん
2019/09/19(木) 19:53:05.48ID:ARAzw0xg0
>>28
ならマルチポスト放置してないで一つに絞ろう
2019/09/19(木) 21:51:25.54ID:0eG7NBUp0
らったったっらたた
38デフォルトの名無しさん (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 22:19:21.08ID:vxcA2ILs0
すみません。
考えてもわからないので教えてください。

Dim Wb2 As Workbook
Set Wb2 = Workbooks(Range("B7").Value)

エラーメッセージ:インデックスが有効範囲にありません。

B7セルには<テストファイル.xlsx>が入っているとします。

Workbookにワークブック名を入れようとしているのですが、
なぜエラーなのでしょうか・・・?
3938 (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 22:33:23.12ID:vxcA2ILs0
SetするWorkbooksは、ファイルが開いていないといけなかったんですね。
自己解決しました。
失礼しました。
2019/09/19(木) 22:48:56.33ID:NLchELHJr
>>39
dドライブ直下にあるとして
Set Wb2 = Workbooks.open ("d:¥" & Range("B7").Value)
なら自動的にファイルを開いてオブジェクト扱いになる
4138 (ワッチョイ 2964-9GzD)
垢版 |
2019/09/19(木) 23:03:19.82ID:vxcA2ILs0
>>40
そんな書き方もあるんですね!
勉強になります。
(私のコードは無駄が多そう・・・。)
2019/09/20(金) 00:09:35.56ID:SAxa71i50
変に答えると幼稚な馬鹿がつけあがる
2019/09/20(金) 01:19:15.21ID:L4svxBEcM
と、幼稚な馬鹿が申してます
2019/09/20(金) 18:45:01.71ID:nQBbqzQu0
あかさたな
2019/09/20(金) 20:42:04.97ID:L83O/vz70
VBAからIEを操作してhtmlで書かれたデータを取りに行くコードを書いています

ターゲットのサイトでは、一度に20件のデータしか表示されず
一番下までスクロールするたびに20件ずつ追加されます(データは全200件です)

htmlでは、20件のデータの下に「::after」と書かれており、スクロールが一番下に近づくと
新たな20件がロードされ、その下に「::after」が現れます

質問ですが、一度に200件全てのデータを取るためにはIEでスクロールさせる必要があるように思いますが
その場合、SendKeysを使って、SendKeys "{PGDN}" のようにするしかないのでしょうか?

それとも他に、何か良い方法があるようでしたらアドバイスをいただきたくお願い申し上げます
2019/09/20(金) 21:06:34.17ID:oAI6ZRfWH
querytables.addでCSVファイルをエクセルシートに貼り付けたとき、グループ化で非表示にされている部分に正しく貼り付けられるのはいいのですが、グループ化非表示から表示状態にされてしまいます。
非表示部分に貼り付けつつ、非表示のままにするにはどうしたらいいでしょうか?
貼り付け先シートの元々の表示・非表示状態はそのままにしたいんですがよい方法はありますか?
2019/09/21(土) 05:45:28.43ID:8VV0xXKBa
sendkeysはなるべく使わない
2019/09/21(土) 08:35:41.78ID:/Gx75Cw00
abcdefg
2019/09/21(土) 12:12:30.41ID:8qwe/SJE0
>>45
ページの作りによる。
例えばあなたは20件ずつなどと言っているけど、URLの入力など次第で200件全部表示できるかもしれない。
スクロールが必要かも分からないがSendkeysなんて使うのは子供と考えて良い。
2019/09/21(土) 13:08:32.19ID:XrHXKxEM0
>>47>>49
レスありがとうございます。
私もSendKeysは使いたくなかったので質問した次第です

> ページの作りによる。
ターゲットサイトは、dアニメのランキングのページです。
https://anime.dmkt-sp.jp/animestore/CR/CR00000013_001

ここからランキングのデータを抜き出して来ようと思ってますが、20件ずつしか表示されず…
何かいい方法はないでしょうかねぇ
2019/09/21(土) 13:10:12.33ID:/Gx75Cw00
あーざーやーかーにー
いーろづいたっ
52デフォルトの名無しさん (ワッチョイ a9ad-7RCD)
垢版 |
2019/09/21(土) 15:10:34.25ID:AFF+Wq/L0
うちの会社に、元SEでVBAバリバリ書ける、という人が
入ってきたんですが、色々Excel作業の自動化をお願いするために
現行の作業手順をお見せしたら、「ここの、Excel関数を使っているところは
意味が分からないので、関数の使い方から説明してください。」といわれ、
VLOOKUPとは、からお話ししないといけないそうで、もう自分でVBA
書こうかと思ってしまいます。
はじめはこういうもので、すぐ慣れてくれるんでしょうか?
「SEの資格」を持っている、という触れ込みの、部長の知り合いなので扱いは
要注意なのです。はぁ。
2019/09/21(土) 15:31:27.17ID:idUljkgM0
経歴詐称があった場合、解雇はできるのか

結論から言うと、解雇できる場合もあればできない場合もあります。
一口に経歴詐称といっても、軽微なものから重大なものまであり、全てのケースで解雇が可能とすることは合理的ではないからです。
解雇ができるケースは、「重要な経歴」を詐称されたときに限られます(重要な経歴とは何を指すのかは下記で説明します)。

職歴に関する経歴詐称

職歴を詐称していた場合は、採用後の仕事の内容、賃金に直接影響を及ぼすもののため、重要な経歴を詐称していると判断される可能性が高いと言えます。
判例では、グラバス事件(東京地判平成16年12月17日 労判889号52頁)があり、プログラミング能力がなかったにも関わらず、あたかもスキルがあるかのように経歴書に記載。
採用面接でもそのように説明して、ソフトウェア会社に採用されたが、経歴詐称を理由とする懲戒解雇が認められたという事例があります。
2019/09/21(土) 15:53:55.16ID:xM/61paW0
そもそも触れ込みから嘘だったのかまで疑ったらキリがないから、そこんとこは何とも言えないけど、
元SEが本当なら、少なくともVB(VBAじゃなく)は書けるけど、普通のオフィスワークはあんましてこなかった、とかじゃないの?
そんな感じのSEさんと一緒に仕事したことはある。ちょっと教えてあげたらあっという間に習得したけど。
でもやっぱ利用頻度の低い関数(LOOKUP系)や若干特殊な使い方(SUMPRODUCTを複数条件の判定や抽出に使うとか)には苦慮してた。
2019/09/21(土) 16:00:48.34ID:y4wrqwmo0
>>52
バリバリ書けるSEならExcelの基本的な関数ぐらい自分で調べられるものだがそれすらできないのはバリバリ具合すら怪しい予感
2019/09/21(土) 17:02:09.02ID:GoVsp8loa
>>52
バリバリのエンジニアがVBA使う仕事に応募なんてしません
2019/09/21(土) 17:12:54.75ID:3YukOVDp0
>>52
そもそも謎の「SEの資格」とか言ってるお前も似たようなもんだろ…
2019/09/21(土) 17:23:57.08ID:DHk9cejb0
知らないことを知らないと言えるやつはまだ大丈夫だわ
ホントにやばいやつってのはな・・・
2019/09/21(土) 21:02:04.95ID:p4RfJbo+0
もちろんできますよ大丈夫です(やべっ何もわからん どうしよー)
2019/09/21(土) 21:13:01.51ID:656pPxFFd
>>50
スクロールしないで取得したかったんだが解析面倒で断念。
スクロールはSendkeysではなく、HTMLWindow2のscrollToなどを使う。

https://pastebin.com/V7S3XW71
2019/09/21(土) 21:14:21.75ID:+OkoEiEq0
VBAって必要になったら都度気合いで調べながら書いて、しばらく書かない間に忘れてまた必要になったらまた調べて覚え直すってことを繰り返してる気がする
2019/09/21(土) 21:59:24.26ID:656pPxFFd
>>52
VBA使いでExcel関数を使わない人もいるからな。
俺はどっちも使うけど両方同時に使うのは避けることが多い。
2019/09/21(土) 22:06:05.25ID:656pPxFFd
>>59
簡単にそんなこと言うと、その時点でバレるぞ。
普通は分かってたら詳細や、かつてその技術でハマッた体験談を語るもんだ。
2019/09/21(土) 23:00:31.94ID:/Gx75Cw00
あいうえお
2019/09/21(土) 23:30:08.68ID:XrHXKxEM0
>>60
> スクロールしないで取得したかったんだが解析面倒で断念。
> https://pastebin.com/V7S3XW71

おお、わざわざここまで!
大変お手数をおかけすることとなってしまい、申し訳ないやら嬉しいやら…ありがとうございます!!

> スクロールはSendkeysではなく、HTMLWindow2のscrollToなどを使う。
最近、ネットのブログなどを参考に
見よう見まねでExcelのVBAとIE操作を両方一緒に始めたのですが…

ループで200項目取り出すまでの条件の書き方、スクロールの書き方、すごく参考になります!
ランキングデータの取り出し方…、ここまでシンプルに書けるものなんですね!!

恥ずかしながら、まだオブジェクトとかコレクションとかアイテムとかがごっちゃになってて頭で整理できておらず
文法エラー(?)の嵐に悩まされつつコードを書いてる段階で…"ChildNodes"とかもまだ使ったことないです…

本当に感謝です。
66デフォルトの名無しさん (ワッチョイ 298e-l2za)
垢版 |
2019/09/21(土) 23:32:05.21ID:JIxctC3M0
また幼稚なゆとり世代馬鹿か
2019/09/22(日) 05:33:04.20ID:8C/KzzE0a
他人の批判しても成果はあがらない
2019/09/22(日) 17:46:57.02ID:aib8uIrzr
凄く基本的な質問だと思うのですが、
Range("A1".Offset(0,12)).Activate
はだめで、
Range("A1").Offset(0,12).Activate
が正しいのはなんでなのでしょうか?
2019/09/22(日) 17:53:07.62ID:7ea+dVk1a
>>68
VBAでそのへんを正しく理解するのはまず不可能だしその必要もないから、定型句だと思って暗記しなさい
ちゃんと理解したかったらJavaのようなきちんとしたオブジェクト指向言語を学ぶことをお勧めする
2019/09/22(日) 18:49:17.99ID:hRt1URHX0
>>68
引数が間違ってるから
2019/09/22(日) 19:59:23.95ID:hXw+7SRax
>>68
一番目の式の方は、"A1".Offset(0, 12)という表現がVBAの構文上無効で何も値を返さない式になっている
なので、参照先のセル範囲の名前をバリアント型の引数として要求しているRangeプロパティ式の評価に失敗してしまい、Rangeオブジェクトの取得にも失敗する

文字列や数値のリテラルに.(任意の値)と続けて何らかのオブジェクトにアクセスしようとしても、そもそもそのようなアクセスルールが定義されていないので当然失敗する

反対にRange("A1").Offset(0,12)の方は構文上無効な表現がなく、RangeオブジェクトのメンバのOffsetプロパティ式を正しく用いているので、Offsetプロパティを介してA1セルから12列分座標移動したセルを取得することができる
2019/09/23(月) 08:06:29.00ID:1/X0hGb20
なにぬねの
2019/09/23(月) 08:16:13.52ID:DBTsObIXM
VBAのリテラルはメンバを持たないから
他言語だと型変換とかあるんだけど
2019/09/23(月) 14:19:12.95ID:6dsrIE/rx
リテラルがそのままstring型オブジェクトとして使える言語だとメンバアクセスできて楽だよね
2019/09/23(月) 21:03:41.25ID:1/X0hGb20
たちつてやと
2019/09/24(火) 00:09:46.67ID:Knbo6pxK0
VBEはインテリセンスがクソ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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