Excel VBA 質問スレ Part68

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ dbda-8BP0)
垢版 |
2020/08/30(日) 11:55:27.33ID:Oy/VxFsh0
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付ける

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

※前スレ
Excel VBA 質問スレ Part67
https://mevius.5ch.net/test/read.cgi/tech/1593104489/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/10/04(日) 19:09:56.24ID:mqiPq7lq0
連投すいません
2020/10/04(日) 19:15:03.93ID:l1LxtJm7d
注意

ID:mqiPq7lq0

いつもの馬鹿です
2020/10/04(日) 21:13:23.82ID:3bz1Ts/P0
>>471
検索したらいいんじゃね
2020/10/04(日) 21:42:10.14ID:NRUY+ZF00
>>471
例えとかいい感じとかじゃなくて正確にコードを提示してどの部分をどうしたいのか明確に説明した方がいいよ
476デフォルトの名無しさん (スッップ Sd1f-EBv7)
垢版 |
2020/10/04(日) 21:43:28.32ID:hlbFeQNpd
後出し続けて全部作ってもらおうという魂胆の奴だぞ
2020/10/05(月) 01:21:09.51ID:Roj0MJiCr
VBAからIEを操作して、タグを指定して.valueやselctedで自動化しているのですが、ヤフオクの商品説明だけどうしても値の挿入ができません。
Tabや近い要素をフォーカスしたりクリックし、SendkeyなどでShift +Tabからエンダーなど試していますが、一向に解決できません。
直接でか無くてもカーソルが点滅させれれば、クリップボード経由で貼り付けるような仕様にしようと考えています。
2020/10/05(月) 07:08:41.25ID:z7kgQPv30
漏れは、Ruby, Selenium Webdriver で、ブラウザを自動操作して、
send_key で、ユーザー名・パスワードを自動入力して、ヤフーにログインしてる

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new
options.add_option( :detach, true ) # ブラウザを切り離す
options.add_argument( '--start-maximized' ) # 画面最大

driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 10 # default timeout

driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym";

element = driver.find_element(:id => "username")
element.send_key "ユーザー名"

driver.find_element(:id => "btnNext").click

element = driver.find_element(:id => "passwd")
element.send_key "パスワード"

driver.find_element(:id => "btnSubmit").click
2020/10/05(月) 07:11:02.53ID:z7kgQPv30
そもそも、IE なんか動くのか?

漏れは、Chrome
2020/10/05(月) 12:57:11.88ID:BlyIycRMM
>>475
すみません。

Sub test
Dim i,ary()
For i = 1 to 2
ary = TestFunc ※ary配列の要素の最後に呼び出した配列を追加していきたい
Next
End
2020/10/05(月) 13:22:13.75ID:PJYbs+y10
配列に配列を追加するのを初心者がつくるなら
追加する2つの配列と結果を格納する配列の計3つを用意して順番に格納すればできないかな?
2020/10/05(月) 14:35:29.71ID:8f5Gi5TxM
>>480
いい加減にしろや糞が
2020/10/05(月) 14:54:20.99ID:3En1oQ3G0
>>471
redim preserveとUBoundを使うのかも

まあしかし、その処理ほんとに配列でやるのが良いのか検討したほうが良いんだが
VBAコレクション系弱いからなぁ
2020/10/05(月) 15:05:07.42ID:PJYbs+y10
検索すればすむのにね
2020/10/05(月) 17:50:38.43ID:BlyIycRMM
>>481
>>483
ありがとうございました。
2020/10/05(月) 17:58:27.13ID:FAPvswgpM
喧嘩腰だなあ
何しにきてんのさ
2020/10/05(月) 18:26:34.61ID:KW0b9HJla
くれくれ君だからしょうがないだろ
488デフォルトの名無しさん (ラクッペペ MM7f-62ru)
垢版 |
2020/10/05(月) 19:48:49.79ID:UUAqkjmTM
>>484
F1キー押す方が早くね?
2020/10/05(月) 19:51:04.71ID:0f3oInSL0
>>488
押すだけならワンキーだけど、オンラインヘルプはそこからが長い
2020/10/06(火) 10:31:57.17ID:9/35+5mY0
大人の対応でうまく誘導してやろうぜ
2020/10/07(水) 19:45:01.41ID:FTOZLATq0
下記のように特定の文字を削除して、改行をやめて1行文にしたいのですがコードのご教示いただけないでしょうか


やんやんつけ棒§
めちゃ美味い

ポテトチップス§
めちゃ美味い



やんやんつけ棒めちゃ美味い

ポテトチップスめちゃ美味い
2020/10/07(水) 20:04:32.74ID:7ZMz7DKjM
まともなテキストエディタ(VSCodeとかサクラエディタとか)で開いて正規表現置換で§¥r¥を空に置換すればよい
2020/10/07(水) 20:05:03.03ID:7ZMz7DKjM
訂正
§¥r¥n
2020/10/07(水) 20:27:15.03ID:FTOZLATq0
>>492
なるほど…めちゃ助かります。ありがとうございます。
495デフォルトの名無しさん (ワッチョイ 8ae6-SfJD)
垢版 |
2020/10/07(水) 21:05:04.00ID:8t5FIA980
もっと面白い質問しろよ
2020/10/07(水) 21:08:11.63ID:EPmDsevha
やんやんつけ棒って何?
2020/10/07(水) 21:08:37.26ID:FTOZLATq0
申し訳ありません、もう一点

A1:私は実は理学部出身
A2:の元々は地質学者です
A3:
A4:こうした南鳥島で
A5:
A6:レアアースの濃集が
A7:起こる
A8:
A9:というのは
A10:
A11:特徴的な層準に

A1:私は実は理学部出身
  の元々は地質学者です
A2:こうした南鳥島で
A3:レアアースの濃集が
  起こる
A4:というのは
A5:特徴的な層準に


下の行に文字列 → 2行の文章として、改行を入れてExcelの1マスにまとめる
下の行が空白 → 1行の文書なのでそのまま

これをなんとかVBAで自動化したいのですが記述を教示願えますでしょうか

面白くない質問ですみません…
2020/10/07(水) 21:11:26.09ID:JTTOzasI0
>>497
その条件2つそのままコードに直していけるよ
2020/10/07(水) 21:17:21.39ID:ueKkqa210
改行がLfなのかCrなのかCrLfなのか知らんが
Replace("改行入りの文字列", vbLf, "")
2020/10/07(水) 21:58:27.94ID:JTTOzasI0
>>499
そんなことしたら改行しなくなるが…
501デフォルトの名無しさん (ワッチョイ ca6d-zMau)
垢版 |
2020/10/07(水) 22:16:39.68ID:XaxSLEYL0
いつものクレクレ君かな
2020/10/07(水) 22:51:28.53ID:7uT04k8fM
・コードを要求
・追加で教えて

いつもの人だね
2020/10/07(水) 22:54:48.87ID:8t5FIA980
普通に書けばできることを聞く意味が分からん

もしかして書けないの?
書けないならやめればいいのに
2020/10/07(水) 22:56:25.93ID:Az9cGqg8M
>>498
>>499
ありがとうございますm(__)m
2020/10/08(木) 01:49:40.56ID:584FeZ4r0
>>497
VBAに慣れている人なら簡単に自動化というかVBAで組める内容ではある
問題はこの程度の内容を質問するより先に、自力でできるとこまで自分で
やらなかった最初の一歩が間違っているんだと思う
2020/10/08(木) 09:04:33.67ID:BqKPxLQJa
CSVとして保存
VSCode等のまともなエディタで開く
([^¥r]+)¥r¥n([^¥r]+)を”$1¥r¥n$2”に置換
¥r¥n¥r¥nを¥r¥nに置換
Excelにインポート

>>492同様にワンショットでいいならこんな感じでいけるんじゃね
2020/10/08(木) 14:32:22.56ID:584FeZ4r0
それができないのが初心者
2020/10/08(木) 15:37:32.47ID:d1cy1ieUM
クレクレ君のより煽ってる奴のがうざいんだけどね
VBAだけが人並にできるからこのスレにいつも欠かさず覗きにきてる感じか?
いつものお前が邪魔ですよお
2020/10/08(木) 15:59:16.76ID:btiqMG+Y0
>>508
大丈夫スルーしてるから
遠まわしでも構うと同列に
2020/10/08(木) 17:05:05.08ID:+6fedHspM
>>508
くれくれ君本人乙
2020/10/08(木) 19:30:11.76ID:bwT1M8vM0
>>507
できないことは問題じゃない
やろうとしないことが問題
2020/10/08(木) 19:55:49.61ID:YPYO8uSI0
たしかにやろうとしないことが問題
てのは御指摘のとおりですね。すみません。
映像制作を生業としてますが普段tipsを聞くのりで聞いてしまいました。
2020/10/08(木) 20:04:37.46ID:KjDVO4Tm0
>>512
5chなんて便所の落書きなんだからそれでいいと思う。
ただ、まともな返事を期待して馬鹿を見ても仕方ない場所でもあるけれど。
2020/10/08(木) 21:04:52.28ID:DcpygGCOd
ただでさえ印象悪いのにどうでもいい言い訳まで付けてさらに印象悪くするよくあるパターン
515デフォルトの名無しさん (ワッチョイ 6bda-q18j)
垢版 |
2020/10/09(金) 00:24:11.53ID:t8qEIjmh0
Dim dw As Date
Dim i As Integer

Sub test()
'ランダムに並び替える

Randomize
'乱数を入れる
For i = 1 To 200
Cells(i, 2) = Rnd()
Next i

'乱数で昇順並び替え
Range("A1:B200").Sort _
Key1:=Range("B1"), Order1:=xlAscending, _
Header:=xlNo, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin

'乱数を削除
Range("B1:B200").Clear

dw = DateAdd("S", 5, Now)
Application.OnTime dw, "test"

End Sub
516デフォルトの名無しさん (ワッチョイ 6bda-q18j)
垢版 |
2020/10/09(金) 00:26:14.42ID:t8qEIjmh0
>>515
のdw = DateAdd("S", 5, Now)
Application.OnTime dw, "test"
を入れると、
「実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。」
となってしまいます。

「マクロのセキュリティ」は「すべて有効」にしています。

どうすればいいでしょうか
2020/10/09(金) 00:56:17.14ID:8xBy2vBw0
>>516
そのプロシジャを標準モジュールに書く

CellsとかRangeとか、ちゃんとシート指定しといたほうが良いぞ
518デフォルトの名無しさん (ワッチョイ 6bda-q18j)
垢版 |
2020/10/09(金) 01:28:40.34ID:t8qEIjmh0
>>517
できました!
>CellsとかRangeとか、ちゃんとシート指定しといたほうが良いぞ
わかりました

ありがとうございました。
2020/10/09(金) 16:14:30.36ID:SmS5zjtB0
1,1,2,2,3,4,4,4,5,6

1-1,1-2,2-1,2-2,3,4-1,4-2,4-3,5,6
に変換したいのですが、どういうコード書けばよいのでしょうか?
2020/10/09(金) 16:19:59.95ID:5DciVe+j0
連想配列使ってカウントするか(0 to 対象の値のMax)の配列を用意して、Array(対象の値)にカウントするかが1番頭使わなくて済むかな?
2020/10/09(金) 16:55:39.01ID:9cfuJ5OLM
かなり前だけどこのスレで教わったアドバイスが今やってることでピンときた
タブ増やして進めてくより
userformをhideとshowで工程進めてくみたいにしたほうがいいわ
ありがとうかなり前に教えてくれた人!
2020/10/09(金) 17:52:44.19ID:OU1KT8YFa
>>519
fori=1 to 要素数(※要素数はカンマで区切られた数)
数字=数字 & “-” & i
next i
みたいな感じで
前の数字と違ったら数字をリセット
(iが1ならこの処理はしない)
要素がひとつなら処理せず次のiに
2020/10/09(金) 18:03:17.75ID:klvVBjUq0
next i って書く人嫌い
2020/10/09(金) 18:15:01.53ID:FzRk+nqKp
かなり前の話と言えば
昔Privateで書かれたプロパティを
外部から取得する方法を書いてた人がいたけど
あれどうやるんだったっけ
525デフォルトの名無しさん (ワッチョイ 03e5-SfJD)
垢版 |
2020/10/09(金) 18:33:13.76ID:/2wG1kS20
内部から漏洩させるのが確実
526デフォルトの名無しさん (ワッチョイ 03e5-SfJD)
垢版 |
2020/10/09(金) 18:36:07.52ID:/2wG1kS20
>>523
それ以前にまったく要望を満たしていない
2020/10/09(金) 21:13:45.01ID:hr48HmJ4d
>>517
俺はブックも必ず指定するけどね。
2020/10/09(金) 21:15:25.62ID:hr48HmJ4d
>>519
どうしたいのかもう少し言葉で説明してくれる?
2020/10/09(金) 21:41:09.60ID:KqgB0xuS0
>>519
普通にカウントアップして、1から2に、2から3に上がるときにカウンターリセット。
2020/10/09(金) 21:44:54.18ID:VcvC9Dp/0
1つしかなかった時に連番を付けない処理が一手間多くて面倒
データの先読みが必要になる
2020/10/09(金) 21:49:11.48ID:5R2Ih+qA0
出力タイミングを次の数字を見てからにすれば楽
2020/10/09(金) 21:49:18.81ID:2P2kQgrz0
1個でも複数でも変わらない
おかしな考え方してるんだろう
533デフォルトの名無しさん (ワッチョイ 8ae6-SfJD)
垢版 |
2020/10/09(金) 21:49:40.29ID:hWEYACMU0
>>528
1.処理速度
2.低コスト
3.低ステップ
4.読みやすさ

優先順位はとりあえずこんな感じで頼むわ
2020/10/09(金) 22:02:55.54ID:VcvC9Dp/0
次の数字を見るかどうかの所で配列の最後かどうかも判定する必要があって面倒
シンプルでうまい方法があるんなら言葉じゃなくてコードで答えてくれ
2020/10/09(金) 22:06:14.03ID:rNmj4HJx0
splitでカンマ区切りの配列化
instrで個数確認
かね?
2020/10/09(金) 22:07:17.45ID:rNmj4HJx0
>>534
Uboundで判定して抜ければいいじゃん
2020/10/09(金) 22:19:01.76ID:VcvC9Dp/0
>>536
ちゃんと動くコード書いてみて
2020/10/09(金) 22:24:25.52ID:VcvC9Dp/0
Sub Macro1()
  Dim a(), b()
  a = Array(1, 1, 2, 2, 3, 4, 4, 4, 5, 6)
  u = UBound(a)
  ReDim Preserve a(u + 1)
  ReDim b(u)
  a(u + 1) = a(u) + 1
  x = a(0) + 1

  For i = 0 To u
    If a(i) - x Then
      c = 1
    Else
      c = c + 1
    End If
    If c = 1 Then
      b(i) = a(i)
      If a(i) = a(i + 1) And u - i Then b(i) = b(i) & "-1"
    Else
      b(i) = a(i) & "-" & c
    End If
    x = a(i)
  Next

  Debug.Print Join(b, ",")
End Sub
2020/10/09(金) 22:47:08.38ID:VcvC9Dp/0
これよりシンプルにするのは俺には無理だった

Sub Macro1()
  Dim a$(), b()
  a = Split("1,1,2,2,3,4,4,4,5,6", ",")

  u = UBound(a)
  ReDim Preserve a(u + 1)
  ReDim b(u)
  a(u + 1) = a(u) + 1
  x = a(0) + 1

  For i = 0 To u
    b(i) = a(i)
    c = c + 1
    If a(i) - x Then c = 1
    If (c > 1) + (c = 1) * (a(i) = a(i + 1)) * (u - i) Then b(i) = b(i) & "-" & c
    x = a(i)
  Next

  Debug.Print Join(b, ",")
End Sub
2020/10/09(金) 23:08:21.94ID:VcvC9Dp/0
b(i) = b(i) & "-" & c

b(i) = b(i) & -c
2020/10/09(金) 23:19:19.22ID:760t1BpC0
プログラミングのお題スレにも、たまにあるけど、
次の要素を先読みするのは面倒

スタックのpeek みたいに、要素を読み取るだけで、削除しない関数があればよい
2020/10/10(土) 06:22:18.37ID:BjcbKuib0
Ruby では、

# 一旦、整数の2次元配列にする。[[1, 1], [2, 2], [3], [4, 4, 4], [5], [6]]

result_ary = input_ary = "1,1,2,2,3,4,4,4,5,6".split( "," ).
chunk_while{ |prev, nxt| prev == nxt }.each_with_object( [ ] ) do |ary, acc| # 蓄積変数は配列
if ary.length == 1
acc.push( ary[ 0 ] )
else
ary.each_with_index do |num, idx|
acc.push( "#{ num }-#{ idx + 1 }" )
end
end
end

puts result_ary.to_a.join( "," ) # カンマ区切り
2020/10/10(土) 06:24:55.49ID:BjcbKuib0
>>542
修正

># 一旦、整数の2次元配列にする。[[1, 1], [2, 2], [3], [4, 4, 4], [5], [6]]
一旦、文字列の2次元配列にする
2020/10/10(土) 06:29:37.77ID:BjcbKuib0
>>542
修正

>result_ary = input_ary = "1,1,2,2,3,4,4,4,5,6".split( "," ).
result_ary = "1,1,2,2,3,4,4,4,5,6".split( "," ).
2020/10/10(土) 06:39:31.44ID:WLqCacU70
データの種類が少なければ連想配列
2020/10/10(土) 09:37:35.06ID:ejDp+I1j0
先読みって考えるから面倒なのでは?
後出しって考えればいいのでは?
2020/10/10(土) 09:43:21.90ID:VjEh1Ow80
てかあの程度の仕様なら自分で書けよって思う
あれぐらいで書けないってのは根本的にプログラミングの基礎分かってないでしょ
forとifで一度自分で書いてみろと
2020/10/10(土) 11:33:09.64ID:ZZ8h2+k60
書く気が無いからコードくれと言ってるんじゃないの
2020/10/10(土) 12:12:33.28ID:PwUkT7dUM
いつものあいつでしょ
2020/10/10(土) 14:51:13.18ID:l6OboMxr0
書けない奴「いつもあいつでしょ」
2020/10/10(土) 15:12:08.20ID:PwUkT7dUM
煽って自演のいつもの馬鹿
2020/10/10(土) 15:36:01.73ID:l6OboMxr0
おじさん「煽ってなんちゃら」
553デフォルトの名無しさん (ラクッペペ MM86-SfJD)
垢版 |
2020/10/10(土) 15:38:43.61ID:VaQE37nUM
バグってハニー
2020/10/10(土) 17:43:29.69ID:aEE68DdLM
いつものあいつ確定
2020/10/10(土) 22:30:05.80ID:BjcbKuib0
データベース変換などは、Ruby のEnumerable のメソッドを見て、
シェル芸とか、プログラミングのお題スレの問題を解いた方がよい

VBA は可読性が悪すぎて、作っても再利用できない。
OSS で全会社共通で、RubyのEnumerable 相当のメソッドを作って公開するべき!

他言語ではたいてい、Rubyと等価のメソッドを作る
2020/10/10(土) 22:31:31.39ID:BjcbKuib0
>>555
修正

>データベース変換などは
データ変換などは
2020/10/11(日) 00:52:32.73ID:l/QRoUUr0
>>555
布教活動ご苦労さん
必要になったら勝手にRubyスレに行くから
帰っていいよ
2020/10/11(日) 08:15:59.41ID:qzIChT2z0
>>555
データ変換てのは基本的な作法さえ知ってればEnumerableメソッド使わなくても特に困ることもないだろう
ただのループ構造をこねくり回してるだけでそのためにメソッドを割り当てるなんてお仕着せもいいところ
2020/10/11(日) 10:01:12.40ID:QZ/HZvxF0
>>557-558
なぜ相手するんだ…
560デフォルトの名無しさん (ワッチョイ 6b63-JAxH)
垢版 |
2020/10/11(日) 12:29:43.68ID:lH9sVzvl0
Acrobatを使用したプログラムを複数回実行すると初回だけ成功し
2回目以降は
実行時エラー2147467259(80004005)
エラーを特定できません
となります(idに代入する行でエラー)
終了処理に不備があってacrobatのプロセスが残っているのではと思いましたが
色々なサイトを見ても解決がわからない状態です。
どうすれば治りますか。
プログラムは次のレスを参照ください。
561デフォルトの名無しさん (ワッチョイ 6b63-JAxH)
垢版 |
2020/10/11(日) 12:30:03.99ID:lH9sVzvl0
Dim objAcroApp As New Acrobat.AcroApp
Dim objAcroAVDoc As New Acrobat.AcroAVDoc
Dim objAcroPDDoc As New Acrobat.AcroPDDoc
Dim id As Long
Dim js As Object
Dim SaveName As String

id = objAcroApp.Show
id = objAcroAVDoc.Open(FilePath, "")

Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
Set js = objAcroPDDoc.GetJSObject
SaveName = FolderPath & "\" & Replace(FileName, ".pdf", "")

'変換のうえテキストファイルとして保存
js.SaveAs SaveName & ".txt", "com.adobe.acrobat.plain-text"

'PDFファイルを変更無しで閉じる
id = objAcroAVDoc.Close(1)

'Acrobatアプリケーションを終了する。
id = objAcroApp.Hide
id = objAcroApp.Exit
Set js = Nothing
Set objAcroAVDoc = Nothing
Set objAcroApp = Nothing
2020/10/11(日) 18:37:51.01ID:7Qx+aWsY0
どこだか忘れたけど、閉じる・解放はこの順番じゃないとダメって書いてあるサイトがあったぞ。
2020/10/11(日) 20:12:54.59ID:WEczn1o20
オブジェクト型にNothingを代入しても、参照ポインタが書き換わるだけでメモリが解放されるわけじゃないんで、順序はそれほど重要じゃない
2020/10/11(日) 21:39:34.57ID:CPiGYYUg0
>>560
必ず再現するなら同じ現象が発生する最小のコードを作ってみ
2020/10/11(日) 23:29:10.26ID:gmCwGThW0
>>561
とりあえずDimでNewするのやめて様子見てみ
566デフォルトの名無しさん (ワッチョイ 6f5f-e5Pm)
垢版 |
2020/10/12(月) 01:35:39.95ID:EUVfONAL0
どうやって再度、実行できているのか?

仕事ができない人がよく言う説明。
2020/10/12(月) 08:27:00.05ID:CsRHImZw0
>>560
タスクマネージャーを起動して、プロセスを終了させてから、実行すれば?
568デフォルトの名無しさん (ラクッペペ MM86-SfJD)
垢版 |
2020/10/12(月) 10:12:47.93ID:5eYbb8SbM
アクロバットがすぐに終了しないのは体感でも分かるレベル
569デフォルトの名無しさん (ワッチョイ 6f5f-e5Pm)
垢版 |
2020/10/12(月) 18:47:34.51ID:EUVfONAL0
2回目以降から1回目に戻る手順くらい書けよ!
570デフォルトの名無しさん (ワッチョイ 07ad-yGJI)
垢版 |
2020/10/12(月) 21:34:54.79ID:mxOFfEsA0
おもいついた
>>530
最後にsubstituteでまとめて消せばよくね?
2020/10/12(月) 23:43:56.93ID:k3Vmfe+e0
時間を戻そう
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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