[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 03/22 05:48 / Filesize : 289 KB / Number-of Response : 1047
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part57



1 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:42:39.57 ID:K1uuwFLt.net]
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part56
mevius.5ch.net/test/read.cgi/tech/1534976724/

556 名前:デフォルトの名無しさん [2018/10/03(水) 21:13:21.04 ID:4mO7hAaA.net]
Range(1,1).Value = 1-1
これをやると、1月1日にExcelが日付と解釈して変換する。
これを防ぐにはどうしたらいいですか。

文字列として格納するために""で囲むという手があるがそれをやりたくない。
理由は値(1-1)に加工していじってるから。

ちなみに、1-1は番地のつもりです。

557 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 21:37:41.99 ID:B0/YTPvH.net]
>>533
書式を明示的に文字列にしてからやってみたら?
.NumberFormatLocal = "@"

558 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 21:58:23.71 ID:siQNEaWd.net]
>>533
その式だと1-1で0が格納される訳だが?
セルに文字列として格納させるなら532の方法か、先頭にシングルクォーテーションを付与

559 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 22:24:31.18 ID:IRo5OOwi.net]
1件だけなら 「Range(1, 1) = "'1-1"」でもいいかもしれんが、沢山あるようなら配列を使って一発代入するかな。

560 名前:デフォルトの名無しさん mailto:sage [2018/10/03(水) 22:37:26.98 ID:cOBWyVpF.net]
>>459です。
>>523さんありがとうございます。
文字化けしない環境で試してみたら、画面は見えました。
ですが、肝心のコードが見当たらない・・・orz
シートに記載されてる情報を見る限り、恐らく>>523さんのが一番私が求めているものに近いかな、と思いました。
>>523さん、ダウンロードしてもコードが見えないので、
このスレにコードをコピーしてもらえないでしょうか?

561 名前:デフォルトの名無しさん [2018/10/03(水) 23:48:07.24 ID:FigU8Mbj.net]
Cells(Rows.Count, 1).End(xlUp).Row
これだとhiddenで隠れている行は無視されてしまいます
あくまでも最後に入力されている行を取得したい場合はどうすればいい?

もちろんhiddenを一時的に表示にする以外方法で
隠れていてもデータ行として扱う方法

562 名前:デフォルトの名無しさん [2018/10/03(水) 23:54:17.02 ID:7gIy/TEB.net]
↓ココに操作手順がおいた
fast-uploader.com/file/7094133678468/

[SQLの編集]タフ

563 名前:゙に編集の仕方が載ってる(denpyouを例にしてるが、編集の仕方は他も同じ)
※ vbaじゃないからな、コードはない
※ ちなみにデータとデータの抽出結果を出力するブックは別でも問題ない

新規に自分で作成したい場合は
>>437 ← コレ
を参考にしなさい
[]
[ここ壊れてます]

564 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 00:51:18.54 ID:FEHQanR0.net]
半角先生口は悪いけど割と優しいからすき



565 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 00:55:39.43 ID:X6BA3+Oo.net]
VBAの実行環境をDockerizeする方法を教えてください

566 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 07:43:14.54 ID:tsjyo4iv.net]
>>538
used range使えば?最終行取得でググれ

567 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 09:11:12.18 ID:ZcbeCQ3S.net]
UsedRangeはプロパティに変更が加えられたセルを全てカウントアップするから物凄く癖がある
うっかり列範囲全体に書式設定なんかしてると最終行は1,048,576行目なんてことになるので注意

568 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 12:04:05.58 ID:x9VzQgv/.net]
>>543
列に対しての書式設定ならそんな風にはならない。
貼り付けするとそうなる危険性はあるけど、今のエクセルは警告出るし、実行に時間かかるし、めちゃくちゃ重たくなるから、マクロ以前にブック修復すべき案件

569 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 13:15:55.34 ID:Vut2i4+m.net]
Do loop関数でウェブ上の変数を取り込んでセルに表示したいんですが、セルA1に最新の変数を表示し、一つ過去のは真下セルに移動する
これを繰り返して変数をA列に積み上げいくようにしたいんですが、どうすればよいでしょうか

570 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 13:37:33.14 ID:Vut2i4+m.net]
挿入でできました 失礼しました

571 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 14:40:06.72 ID:Vut2i4+m.net]
Selenium Webdriverについて質問です。

@chromeを起動
Aあるwebサイトのユーザーページにログイン
Bユーザーページ上で作業
という操作を自動化しようとしています。
@、Aは良いのですがBが複雑なため、その部分のコードで試行錯誤しております。
しかしコードを修正するたびに@から行っているため時間がかかっております。
@Aで起動したブラウザを利用して、Bから別のsubプロシージャにして、Bだけ実行して検証したいのですがどのようにすればよいのでしょうか。
下が@Aのコードです。

sub 1()
Dim driver As New SeleniumWrapper.WebDriver
driver.Start "chrome", "https://aaa.com/login?"
driver.get ("/")
driver.findElementByName("UserID").SendKeys ("yamada")
driver.findElementByName("pass_word").SendKeys ("1234")

572 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 17:50:31.63 ID:ImPAYWBj.net]
Private driver As SeleniumWrapper.WebDriver

Sub Init()
@
A
End Sub

Sub Work()
driver.get(ユーザーページ)
B
End Sub

他のスクリプト言語に変えたほうが楽ですよ

573 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:15:13.64 ID:Vut2i4+m.net]
>>548
ありがとうございます。
やってみたのですが、getメソッドでSystem.NullReferenceExceptionというエラーが出ます.....

他のスクリプト言語というとRubyということになるのでしょうか?

574 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:36:18.81 ID:/wVNZxwJ.net]
>>549
driverを初期化してないからだと思うぞ。



575 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 18:46:00.60 ID:Vut2i4+m.net]
>>550
大変申し訳ないのですが詳しく説明して頂けないでしょうか....
勉強不足ですみません

576 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 19:13:03.15 ID:/wVNZxwJ.net]
>>551
Private driver As SeleniumWrapper.WebDriver ←モジュール領域(各プロシージャの更に上位)でdriverを定義。ただし初期化していない。

Sub Init() ←Initプロシージャを実行する時にdriverを初期化し@・Aを実行する必要がある
Set driver = New SeleniumWrapper.WebDriver ←ココ

577 名前:
@
A
End Sub

Sub Work() ←Initプロシージャを実行してからWorkプロシージャを実行すると、色々(B)を実行してくれる
driver.get(ユーザーページ)
B
End Sub

念のため言っとくと俺は>>548じゃないがついでに解説しただけで、
>>547が求めているものがこれで満たせるのかまでは関知しない。
[]
[ここ壊れてます]

578 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 19:25:04.84 ID:USJCeaSx.net]
質問いいですか?
VBAでコールバックを行うとき
クラスが対象の場合はCallByNameで行う事が出来ますが
標準モジュールの場合、どうするんでしたっけ?
確かAPIを使った様な気がしたんですが
どのAPIを使ってどうするのか
忘れてしまいました。

579 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 19:32:08.96 ID:apogHBJA.net]
>>553
忘れたけど ariawase を見れば出てくるんじゃね

580 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 20:46:51.81 ID:Vut2i4+m.net]
>>552
とても丁寧にありがとうございます。追加質問させてほしいです。
A: 今回「driver」はオブジェクト変数となるため、定義の際はnew演算子を使用する。またはsetで格納する必要がある。ということで良いのでしょうか?

B: >>552で「ただし初期化していない」とありますが、あるサイトで「vbaでは変数宣言したときに初期化が行われる」という記述を見ました。
これは、setで格納されてないから初期化すらされてない という意味でしょうか。

C: プロシージャが実行されるごとに初期化されればよいならば、private変数の定義をやめて、@〜A、BそれぞれでDim driver As New SeleniumWrapper.WebDriver と定義すればエラーは出ないと思ったのですが、
やはりBのgetメソッドのところで「System.NullReferenceException」エラーが出てしまいました。何故なのでしょうか・・・

長文ですみません どうか宜しくお願いいたします。

581 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 22:18:56.04 ID:/wVNZxwJ.net]
>>555
A: あってる
B: だいたいあってる
C: まずコードが動くことを確認してから弄れ。>>548の意図が汲めないならすっぱり諦めて別の方法を考えろ。
流石にこれ以上は自分で調べろ。



追伸
B: とりあえず「値型は宣言と同時に初期化される、オブジェクト型はNewやSetをしてからでないと使えない」と思っとけ
C: 要はWebDriverの「使い回し」がしたいという質問に答えたのが>>548
  ・モジュールレベルで宣言すれば、各プロシージャ内から変数「driver」を通じて同じ実体(インスタンスという)にアクセスできる
  ・Initでモジュールレベル変数「driver」を初期化したりStartなどのメソッドを実行すれば、Workでdriverにアクセスした時にその続きのアレコレができる
  ・逆にInitで初期化やStartその他を実行したにもかかわらずWorkで新たな変数「driver」を宣言したらInitで行った処理が水泡に帰する
  ・またInit内で新たな変数「driver」を宣言し初期化等をした場合も、Init終了と同時に実体が消えて無くなる
仕事中なんであれこれ端折って書いたので間違ってる部分もあるかもしれんが、「インスタンス」とか「スコープ」とかでググって調べてみてくれ。

582 名前:デフォルトの名無しさん mailto:sage [2018/10/04(木) 22:32:59.61 ID:Vut2i4+m.net]
>>556
本当に丁寧にありがとうございます。
伝えるのを忘れていましたが、言われた通りにコードを記述しうまくいきました。それを踏まえてのCでした。
インスタンス、スコープで調べてみます。ありがとうございました。

583 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 12:52:55.81 ID:VkzGqctC.net]
「選択したセルの値を-1する」のに下記のようなプログラムを書いた。
Dim cell As Range
For Each cell In Selection
cell.Value = cell - 1
Next
これはOK。

「セルの値がブランクまたは0のとき、ブランクにする」を追加して、
Dim cell As Range
For Each cell In Selection
If cell.Value <> 0 Then
cell.Value = cell - 1
Else
Next
としたら「Nextに対応するForがありません」と怒られてしまいました。
どこがいけないのでしょうか?

584 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 12:58:15.96 ID:vSWfZutq.net]
if文が閉じてないから



585 名前:デフォルトの名無しさん [2018/10/05(金) 16:28:56.84 ID:JjUc2WZB.net]
>>558
お前の知能に障害がある

586 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 16:54:22.89 ID:9/5M8DWU.net]
>>558
インデントが適当だからそういうミスに気がつかない

587 名前:デフォルトの名無しさん [2018/10/05(金) 17:24:22.25 ID:KMKJ670I.net]
else nextとか書く馬鹿にインデントもなにもねーよ

588 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 17:30:08.09 ID:nkW6jPyv.net]
適当ならいいじゃないか

589 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 18:25:40.30 ID:wi1wUlXh.net]
Ifは基本一行で済ませるか、If...Then句を書いた後にすぐ改行して同じインデントレベルでEnd If 句を入れる癖をつけろ

590 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 21:10:17.32 ID:Hvo0Z6Jl.net]
>>448
レベルアップするたびにポイントをVBAにばかり振り分けてきたんだよきっとw

591 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 21:14:01.44 ID:sMfkQDgh.net]
>>558
根本はエクセルのエラーメッセージが明らかに間違っているから混乱する
けどプログラムの世界って大体そんなもんと諦める必要がある

で、対処法としては
>>561
が正解
インデントが適切なら楽勝で気づける問題

>>564は最悪。開発が超遅くなる

592 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:05:56.09 ID:uERkBuVa.net]
質問です。

テキストファイルの中身をセルに出力する処理をやっているのですが、一部のテキストファイルの文字が正常に出力されません。(縦線 " | "のみが出力される)
ただし、判定によってセルの色を変えているのですが、その機能は生きているので、読み込み自体はできているみたいです。
また、全部のファイルで不具合があるわけではなく、特定のファイルの特定のレコードにのみ起こるっぽいです…

補足すると、テキストファイル自体はメインフレームの伝送機能で送ってます。これが原因に関係あるのかはわかりませんが…

詳細聞かれたらお答えしますので、解決にご協力頂ければと思います。

593 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:07:25.21 ID:uERkBuVa.net]
565です。
本題を載せ忘れていました。
原因、改善方法がわかる方いましたら、ご返答願います。

594 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:15:30.06 ID:vSWfZutq.net]
俺はインデントもしっかりでEnd Ifも先に書く派だな、他の言語での閉じ括弧みたいなもんだし



595 名前:デフォルトの名無しさん [2018/10/05(金) 22:17:06.45 ID:KYi5h4An.net]
>>567
その特定のレコードを教えて

596 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:27:19.79 ID:XVCqdvbX.net]
>>566
俺はブロックを先に区切らずにダラダラ書いていく方が効率悪いように見えるんだけど、End Ifを先に書かない方が速度上がるの?
本当だったらそうしてみようかな

597 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:27:20.22 ID:vSWfZutq.net]
>>567
コンピュータのベンダーや年式が違えば文字コード字形の割り当てが違うことも多い

手順
・テキストファイルの文字エンコード、記述形式を正確に把握する
・化けた部分前後数行のみのテストデータを作る
・ウォッチウィンドウを活用して原因を探る

598 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:30:53.32 ID:uERkBuVa.net]
>>570
INPUTはJCL(COBOLアプリを動かすためのスクリプト言語)をテキストファイルに落としたものです。

特定のレコードなのですが、テキストファイルを確認しても、他の出力されているレコードと見た目は全く変わりません。(スペース、データの末尾にも問題なし)
にも関わらず決まったレコードのみに不具合が発生します。



599 名前:マクロが手元にないため画像は載せられませんが、
JCLについては、画像検索して出てきたものとほぼ同じですので参照頂ければと思います。
[]
[ここ壊れてます]

600 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:37:26.08 ID:uERkBuVa.net]
>>572
やはり文字コードがきな臭いですかね
shift-jis になる仕様のはずなのと、他レコードは大丈夫なため問題ないと判断していたのですが、
vba上でも文字コードを明示してあげる必要がありそうですね

601 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 22:59:15.65 ID:MhNSlq6Z.net]
メインフレームなぁ・・・最後に触ったの20年近く前で、びっくりするほど覚えてねぇ。

ちょっと気になるんだが、正常に出力されない時に表示される縦線は、
元のテキストファイルにデータとかデリミタとして含まれている文字なのか?
それとも変換できなかった文字が縦線に置き換わっているのか?

602 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 23:11:22.13 ID:VkzGqctC.net]
>>558
なんかコピペしたときにend ifが抜けてた

603 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 23:23:40.27 ID:lz8xFasJ.net]
>>575
縦線はデリミタではなく、元のレコードにも存在しない文字です。
処理としては、テキストファイルのレコードをそのままセルに出力するだけなのですが…
読み込んだ時点では問題なく、出力したときに縦線に置き換わってる感じですねー

604 名前:デフォルトの名無しさん [2018/10/05(金) 23:39:05.08 ID:JjUc2WZB.net]
>>576
馬鹿は死ねよ



605 名前:デフォルトの名無しさん mailto:sage [2018/10/05(金) 23:53:59.29 ID:E7eIsq4P.net]
>>577
ファイルからレコードを読み込んだら、イミディエイトウィンドウにも出力しておく
データをセルに書き込んだあと、もう一度セルから読み出して縦線になってたら中断するようなコードを書く
中断したらイミディエイトウィンドウの内容を確認

どこで化けたか、1つずつ追跡するしかないです
意外なところでミスをしていたり、仕様だったり、落とし穴があるもんです

606 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 00:57:54.07 ID:F9JdDpiN.net]
>>577
1.入力するテキストファイルに「ろくでもない見えない文字」が含まれている(たとえば制御文字)
 →普通のテキストエディタでは見えないことが多いのでバイナリエディタで確認する
2.テキストファイルのレコードを読み取りセルに出力する処理のどこかに問題がある
 →特定のレコードで発生するということは、特定の文字列のパターンか、特定のレコード数でのみ発生している可能性もある
こんな月並みなことしか考えつかないな。
個人的には、文字化けだったとしたら全部縦線に置き換わるのはおかしいと思うが(化けた文字が一切見受けられず縦線だけってのが妙に気になる)

607 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 04:51:40.31 ID:tnNc0I+3.net]
とりあえず、どんなコードで読み取って表示してるか出さんと話にならんわ

608 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 07:12:44.67 ID:GeqHzxmy.net]
実はテキストファイルのエンコードがutf8とかだったりして

609 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 07:49:00.01 ID:4qqF7BWz.net]
メインフレームだからEBCDICだろ変換前はEBCDICの変換は面倒い

610 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 07:55:07.00 ID:omtH0luh.net]
EOTとかVTの類の制御文字な気がする

611 名前:デフォルトの名無しさん mailto:sage [2018/10/06(土) 13:50:07.16 ID:tnNc0I+3.net]
>>563
SHIFT-JISのはずって言ってるし、ホスト側に大抵変換ツールあるだろ


文字コードや制御文字の可能性よりプログラムのバグの方が確率高い気がするなぁ
まあコード出せばどっちの問題かはだいたい判別できるはず
化けるデータのダンプでもいいけどな

612 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 13:12:34.96 ID:DYNz6D7I.net]
色々と意見ありがとうございます。
コードが掲示できなくて申し訳ないですが、
文字コードについてはホストの変換機能があるはずなので、プログラム上のバグとみてデバックしてみます。

613 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 15:35:18.94 ID:RZXmBbwE.net]
>>569
>>571
正解。

でも、頭の使い方を知らない人にとっては理解し難いんだろ

614 名前:う。
頭を使う作業と単純作業を分けるのが自然になってる人はEndIfを先に書く。
他にもEndWithやNextも先に書くな。

Ifまで書いて条件をどこからかコピペするのに気付いた時はIf a Then...EndIfまで書いてからaと差し替えるとか。
あるいはaの差し替えは中身書いた後の時もあるな。
[]
[ここ壊れてます]



615 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 15:38:24.87 ID:RZXmBbwE.net]
>>579
文字化けはイミディエイトでは分からない場合も多い。
こういう時はデバック用にバイナリで出力するものを作っとくべきだね。

616 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 15:38:37.38 ID:yvtwWR1t.net]
そしてaの差し替えを忘れると

617 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 16:40:59.78 ID:/7FmU20a.net]
VBA「済まんのう、ワシのインテリセンスが貧弱なばっかりに・・・」

618 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 17:11:47.87 ID:RZXmBbwE.net]
>>589
二ワトリか?

619 名前:デフォルトの名無しさん mailto:sage [2018/10/07(日) 19:18:32.78 ID:b8EzOufK.net]
>>587
閉じタグみたいな単純作業を人間がやるのは馬鹿らしいと気付いて別の言語に移行するのが大正解

620 名前:デフォルトの名無しさん [2018/10/07(日) 21:50:24.98 ID:mIq+f5AO.net]
で、pythonみたいな欠陥言語では空文という概念すらない
インチキな制御文で空文を回避する必要がある

つまり、cが言語として一番単純で簡単

621 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 10:32:35.37 ID:nJmWXjgB.net]
しかし少し待って欲しい
C言語が扱うのはDelegateじゃなくて
ポインタだから不慣れな人が使うのは結構危険

622 名前:デフォルトの名無しさん [2018/10/08(月) 10:58:07.65 ID:Z4ZqXDLl.net]
コードの作成ができる方がいらっしゃいましたら、助けていただきたいです。

https:〜〜/〜〜〜/〜〜.pdf
で終わるURLが1000件以上あり、業務でそのすべてを印刷しなければならないのですが、
1つ1つIEで印刷していくのが大変面倒で、VBAで一気に印刷することができないか
調べたのですが、.pdfで終わるファイルをwebから自動で印刷するのは不可能なようでした。

そこで、その1000件以上あるpdfファイルを一気にローカルに保存できないかと考えております。

具体的には、
A列にひたすらURLを貼り、マクロを起動するとローカルの任意のファイルにPDFが保存されていくようなVBAが組めないかと考えております。
(一気に印刷することができれば、尚よいのですが)

どなたかコードを組んでいただけないでしょうか。

お手数ですが、よろしくお願い致します。

623 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 11:21:42.19 ID:H/mp1NsO.net]
curl, wget で、ファイルをダウンロードできる

624 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 12:38:16.57 ID:TfWfyeTE.net]
ダウンロードやら印刷やらはPowershellならそれぞれ1コマンドで出来るんだけどね
VBAだとそこそこ面倒な気がする



625 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 12:47:36.35 ID:rY44Et0R.net]
両面2upで印刷とかだとpowershellでも大変じゃないの

626 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 12:59:10.13 ID:fNYJDKkK.net]
>>595
難しいだのなんだの言われてたけど、テキトーにやってたら簡単にできて拍子抜け
fast-uploader.com/start/7094526398997/

Book1.zip

Book1.xlsm
にリネームしてくれ

A列はファイル名
B列はURL
C列はokかNGか。アテになるかどうかはシランので、落とした後のファイル数はなどは確認したほうが良い

コードの編集は適当にやってくれ
今はテスト用に3つだけにしている
あと保存するファイル名は被らないようにかなり適当に作っている。適当に変えてくれ

で、pdf印刷はこの辺に任せるといいと思う
https://dekiru.net/article/1745/

あと、参考にしたサイト
https://tonari-it.com/excel-vba-windowsapi-urldownloadtofile/

特に何の関係もない、無害なサンプ

627 名前:却dfが置いてあったサイト
http://www.shikisensha.com/pdfs.html
[]
[ここ壊れてます]

628 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 13:00:47.95 ID:wluWAmXV.net]
>>595
powershellスレで聞いた方がいいよ
一括ダウンロードも印刷もけっこう簡単にできる
VBAでもできるけどちょっと面倒だから

629 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 13:16:18.75 ID:fNYJDKkK.net]
そこまで簡単にできるならもうここで書いてしまって良いんじゃない?

630 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 13:21:06.52 ID:SdoZVitL.net]
クレクレに割く労力など微塵もない

631 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 13:21:21.13 ID:XarCorGP.net]
>>595
そんなのjdownloader2とか
webブラウザのアドオン使えよw

632 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 13:36:20.93 ID:fNYJDKkK.net]
>>602
あれ、そうか
PowerShellあんまり知らないから見てみたかった

633 名前:デフォルトの名無しさん [2018/10/08(月) 15:25:31.11 ID:41uO404m.net]
>>595
死ねよ

634 名前:デフォルトの名無しさん mailto:sage [2018/10/08(月) 15:55:52.70 ID:fNYJDKkK.net]
>>603
拡張機能探すのあんまり得意じゃないわ
結局作ったほうが早い

>>605
ざっこw



635 名前:デフォルトの名無しさん [2018/10/08(月) 18:30:52.01 ID:lvy06Ht8.net]
>>599
URLDownloadToFile というAPIがあることをいま知った。
これまで都度 MSXML2.XMLHTTP を作って .Open "GET" していた。
API一発ならその方がスマートだしプログラムをそれベースに書き換えようかと思ったけど、
IDとパスワードを渡さなきゃならない場合は使えないのかな?

636 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 01:51:39.58 ID:FzGViRAL.net]
N列に時刻データが入っている
但し一部の行はブランク

時刻データは"00:10:00"のように時・分・秒が指定されている
表上は"00:10"つまり「時・分」のみを表示

この時刻データの分の1桁目が9の時のみ1分繰り上げて0にしたい
つまり
"00:19:00"→"00:20:00"
"00:59:00"→"01:00:00"
になるようにしたい

セルは複数セルを不連続で選択し、ブランクはパスして
分の1桁が「9」の場合のみ1分繰り上げするにはどうすれば良いでしょうか?

637 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 03:48:33.30 ID:GjEV7PXm.net]
>>608
秒はどうするの?19分30秒だったら20分00秒にするってこと?

とりま、基本的な処理は分を10で割った余りを求めて、9だったら1を足す
それを選択された全セルに対して繰り返す

638 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 07:12:30.74 ID:/OeVfiJl.net]
>>608
O1=N1+IF(MOD(MINUTE(N1),10)=9,TIME(0,1,0),0)

639 名前:デフォルトの名無しさん [2018/10/09(火) 08:27:33.61 ID:0K1bBeTL.net]
>>567-588
Ruby で、そのテキストの該当部分を表示して、確かめる。
他の言語でもよい

>>608
いったん時刻に変換して、1分足してから、また元の形式へ戻す。
つまり、表示形式 → 時刻 → 表示形式

640 名前:609 mailto:sage [2018/10/09(火) 10:04:43.66 ID:0K1bBeTL.net]
>>567-588
制御文字の可能性があるから、文字列をバイナリで見る

文字コードや、UTF-8 ならBOM の有無

セルに入力した時に、特別な意味を持つ文字が入っているとか?
シングル・ダブルクォーテーションなど?

641 名前:デフォルトの名無しさん [2018/10/09(火) 16:25:52.94 ID:YqupZDTJ.net]
会社で社内Webのform類のsubmitボタンを押して出てくるデータベースのデータが抽出されるシステムがあります。
(まあ、このようなシステムはどこにもあると思いますが。)
これ、どうにかして大元のデータベースのデータを丸ごとExcelにインポートする方法ってないですか?
Webのソースを見れば、データベースのサーバのアドレスが書いてあって、それをVBAで取り込む、みたいなのをイメージしているのですが
技術的には可能ですよね?

642 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 16:53:10.93 ID:i ]
[ここ壊れてます]

643 名前:uxGmBKG.net mailto: 技術的には可能だがお前には不可能
イメージが見当違いだ
[]
[ここ壊れてます]

644 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 16:58:57.67 ID:ZX9nrIhI.net]
WEBサーバ自体をハックできるなら。
大抵PHPか.Net実装でソースからは見えない



645 名前:デフォルトの名無しさん [2018/10/09(火) 16:59:23.34 ID:YqupZDTJ.net]
あまりわたしを怒らせないほうがいいぞ
わたしは怒ったら怖いんだぞ

646 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 17:21:21.07 ID:ZX9nrIhI.net]
コンプライアンス違反で懲戒解雇&賠償請求訴訟起こされたいのなら、止める義理はない

647 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 17:57:17.02 ID:3Eshr90N.net]
>>613
会社のシステムなら上司に相談しろよ
社内規定に違反すると最悪解雇もあるからな

648 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 18:10:23.08 ID:MhhKJFZu.net]
>>613
怒らせたくはないけどまともなシステムならクライアントから見えるところにデービーのアドレスは書かれてないよ

649 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 18:17:11.24 ID:MhhKJFZu.net]
クライアント↔Webサーバ↔DBサーバ
ブラウザがやり取りするのはWebサーバ
その先にはアクセス出来ないのが普通

650 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 18:18:22.93 ID:alG4HLy2.net]
普通に上司経由でシステムの所管部署に相談してAPIを共有してもらった方が安全だろ
自作コードでサーバーを直接叩くのはいろんな意味で危険

651 名前:デフォルトの名無しさん [2018/10/09(火) 19:14:35.52 ID:AeEBE3gj.net]
焦っとるなプロさんwおまえらプロさんのコードも十分すぎる程危険なんやがw

652 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 19:46:02.37 ID:fy0WNSeQ.net]
>>613
出発点から「自分で勝手に何かする」というのが間違い。
他の人も言うとおり、まずは自社で管理してるDBなら管理部署に、ベンダのシステムであればそのベンダに、やりたいことを伝えて対応してもらう。
対応してもらうのが無理なら、管理部署やベンダにAPI等を利用してツールを作成して良いか確認を取る。
もしOKなら、API等を利用してツールを自作する。完成したら必ず管理部署やベンタにツールを見てもらう。

勝手にベンダのAPIを利用してSQL発行ツール自作してクビ寸前まで行ったことがある人を知ってる。
大幅減俸で落ち着いたらしいけど今はもういないから実際のところどうだったのかは知らんが。

653 名前:606 mailto:sage [2018/10/09(火) 20:01:04.99 ID:FzGViRAL.net]
>>609-611
ども!

ワークシート上なら"00:59:00"+"00:01:00"→"01:00:00"みたいに単純に繰り上げが出来るので
マクロで同じような計算が出来ないかと考えたんだけど(>>611さんのコメがそうかな?)
具体的な手順が思い当たらなかったので、原始的なやり方で作ってみました

strTime = Format(cell.Value, "hh:nn:ss")でセルの時刻を文字列に読み込み
時(strH)・分(strM)・秒(strS)を切り分け、分の1桁目が9の時だけ

intH = val(strH)、intM=val(strM)で数値化した値から
sumM = ntH*60 + intM + 1 
intH = int(sumM/60)、intM = sumM - intH *60 を計算し

これを時刻に直してセルに戻す、という手順で出来ました

654 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 21:10:44.20 ID:KUCIqBg4.net]
先週文字化けの件で質問をした者です。
あれから例のマクロをデバッグし、無事原因がわかりました。
文字コード云々ではなく、単純なロジックミスという落ちでした…。
お騒がせをしましたが、ご助言くださった方々ありがとうございました。



655 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 21:29:16.80 ID:b4f5o7ms.net]
オートフィルターをかけた状態の表を配列に取り込むには、Copy Pasteで一旦どこかに貼るしかないのかな?

656 名前:デフォルトの名無しさん mailto:sage [2018/10/09(火) 21:52:35.13 ID:ZX9nrIhI.net]
>>625
クローズ報告ありがとさん、






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef