Excel VBA 質問スレ Part76at TECH
Excel VBA 質問スレ Part76 - 暇つぶし2ch938:デフォルトの名無しさん
22/07/06 21:31:49.12 RzEtlOC+0.net
VBAxSeleniumでchromeはオプション設定が出来るけどedgeは出来ないと思ってたんだが、出来るんだな。
ネットでもうまくいかないていう情報が多い。
Chromeの場合
Driver.AddArgument ("user-data-dir=" & fso.BuildPath(CurrentDirectory, "chrome_vba"))
Edgeの場合
driver.SetCapability "ms:edgeOptions", "{""args"": [""user-data-dir=" & Replace(fso.BuildPath(CurrentDirectory, "edge_vba"), "\", "\\") & """" & _
"] }"
まあjsonで渡してるんだが、VBAてjsonてこんな風にデータベタ打ちしか方法がない?

939:デフォルトの名無しさん
22/07/08 15:51:01.23 vIJsrl8u0.net
ダウンロードしたVBAマクロ入りファイル、デフォルト無効化が取り消し。MicrosoftがOfficeの仕様を再度変更
URLリンク(pc.watch.impress.co.jp)

940:デフォルトの名無しさん
22/07/10 15:06:01.33 TbXhrDsy0.net
えぇ((( ;゚Д゚)))恐い

941:デフォルトの名無しさん
22/07/10 16:22:28.20 Rxyi1Cuq0.net
ダウンロードして使うことがないからどっちてもええよ

942:デフォルトの名無しさん
22/07/11 01:16:29.22 TTL+d6j7a.net
コロコロ変わるのは昔から
また変更あるぞ

943:デフォルトの名無しさん
22/07/11 01:40:13.99 vt1vW9IA0.net
インターネット経由がどうたらというのは、古いマイクロソフトと新しいマイクロソフトの内部抗争にすぎない。

944:デフォルトの名無しさん
22/07/11 04:21:24.13 /TJLjZUe0.net
ああゆう最先端の企業でも老害が威張り散らしているのかな

945:デフォルトの名無しさん
22/07/11 04:31:29.20 vt1vW9IA0.net
ビルゲイツ派はAzue妨害派だろうな

946:デフォルトの名無しさん
22/07/11 09:41:27.04 67sTwPgvM.net
大口の客がゴネたんだろう
VBAがいつまでも使えるのもそういう方々のお陰なのだからVBAer達は感謝しないと

947:デフォルトの名無しさん
22/07/11 18:14:40.24 /TJLjZUe0.net
分かったよ

948:デフォルトの名無しさん
22/07/13 15:11:11.33 cdOR/i1g0.net
客先から毎日送られてくるpdfに対し、特定の部分だけを抜いてexcelに出すというものを作りたいです
流れとしてはwordで開いてコピペ→そこから必要な部分だけ整形
という流れで考えており概ねできたのですが、pdfをwordに落とした時に文章がそのまま文章でコピーされる時と1行ずつテキストボックスやら画像やらでコピーされる時がありうまく実用化出来ません
上記か、あるいはその他の方法でも良いので安定的にコピーする方法は無いでしょうか?
ちなみにpdfは定型フォーマットに記載された日報のような形式で、手動なら文字はそのままコピペできます、フォーマットはいつも同じですが中の文章は行数が日により異なります

949:デフォルトの名無しさん
22/07/13 17:04:46.28 +TgcJMJe0.net
>>937
客先にテキストでもくれと依頼すればいいだろ

950:デフォルトの名無しさん
22/07/13 17:32:17.47 H0DndFW/a.net
pdfを書き換えたい訳じゃなくて中身を読みたいだけなら
pdfreaderを使うのが一番楽

951:デフォルトの名無しさん
22/07/13 18:07:17.76 jvbf7mTW0.net
PDFは人間のため、印刷のために開発された仕組み
データの順番がどんだけ変わっても人間の目には同じに見えるようになってるから、中身をプログラムで自動的に取り出すのには向いてない
厳密には不可能じゃないとしても、ものすごく大変
できるだけ別の方法を考えた方がいい

952:デフォルトの名無しさん
22/07/13 18:39:04.67 tqig4XWpd.net
そのPDFが紙からスキャンしたものじゃなく文字データとして残ってるなら、ワード経由しなくてもacrobatreaderで開いてコピペするのが早いとは思う。
PDFをExcelに変換する手段があるなら、変換してマクロで必要な所を抽出できそうだけど元ファイル次第では難しいか?

953:デフォルトの名無しさん
22/07/13 19:16:11.37 RAwbutPOM.net
GOOGLEドライブに入れてドキュメントで開けばOCR使えるからそれを試してみては

954:デフォルトの名無しさん
22/07/13 19:23:52.41 F58RRgFgM.net
pdfってhtmlのようなテキストだったりする、意外と知られていない?

955:デフォルトの名無しさん
22/07/13 19:30:34.74 XpRrYrAX0.net
>>937
パワークエリ

956:デフォルトの名無しさん (ワッチョイ fdce-TkQT)
22/07/13 19:51:06 jvbf7mTW0.net
>>943
中身はテキストなんだけど、データの順番が入れ替わっても同じ見た目の文書が再現できる
だから人間から見て正しい順序で取り出すのが大変
いっぺん出力してOCRした方が早いぐらい

957:デフォルトの名無しさん
22/07/13 20:29:31.07 RAwbutPOM.net
>>943
ここの連中にはよく知られている
pdfの解析はめちゃくちゃキツイ

958:デフォルトの名無しさん
22/07/13 20:29:35.01 +TgcJMJe0.net
>>943
馬鹿なら黙っていればいいのに
htmlじゃねーよ

959:デフォルトの名無しさん
22/07/13 20:34:43.23 RAwbutPOM.net
>>947
「のような」って書いてる
マークアップされてるって事ぐらい分かるでしょ

960:デフォルトの名無しさん
22/07/13 20:40:59.71 +TgcJMJe0.net
>>948
マークアップじゃないし
馬鹿は黙っていればいいのに

961:デフォルトの名無しさん
22/07/13 20:55:32.87 RAwbutPOM.net
馬鹿じゃねーよ
テキトーに言ってるだけだ

962:デフォルトの名無しさん
22/07/13 21:36:26.72 bpgpUpce0.net
バイナリファイルをマークアップされてるって表現する人はじめてみた

963:デフォルトの名無しさん
22/07/13 22:51:54.33 bvCBiwjA0.net
とはいっても取引先からのデータは大半がpdfだからなぁ

964:デフォルトの名無しさん
22/07/13 23:54:44.21 vJ6Ng0OKd.net
そんなもん会社によるだろ
言えばExcelやCSVで送ってくれるとこも普通にある

965:デフォルトの名無しさん
22/07/14 00:12:44.49 X42JNt2t0.net
マーキングするために会社の上司が部下の女に触りまくってるじゃん

966:デフォルトの名無しさん
22/07/14 07:26:28.96 5ehEa+FTd.net
技術力だけで生きていくか、コミュ力も高めて生きていくかの「差」が今回の質問で明らかになったね
今回の場合、コミュ力あるやつならとっくに客先はpdfとは別にcsvとかテキストファイルを送る方向で動いてるよ
俺はコミュ力を高めていく
お前らは今後も無理難題をひたすら解決する技術力を高めていけw

967:デフォルトの名無しさん
22/07/14 08:00:06.43 E22ufzJOM.net
今回のデータをcsvで頂戴したく存じます
コミュも何も一行メール送るだけでいいだろう
むしろこれ出来ないなら何もできんだろ

968:デフォルトの名無しさん
22/07/14 08:06:18.41 KsBnasMha.net
社内規定で社外に送信するデータはPDFとなっておりますので、ご期待に沿えず申し訳ありません。

969:デフォルトの名無しさん
22/07/14 08:12:38.64 1tikFi/NH.net
そういうコミュニケーションとれない奴は、
仕様を決めるときにもコミュニケーションとれないから思い込みで作るまである

970:デフォルトの名無しさん
22/07/14 08:14:11.08 YsqOWTP3d.net
根本解決を目指すアドバイスはいいけど、どんなデータかも質問者と客先の状況も分からないのに、データ貰えば解決(ドャァは乱暴じゃない?
少なくともwordで開いても文字認識がまばらだったりするって時点で、綺麗な様式から出力したデータじゃないのは確かだし、質問者がそういう回答を求めてないとは思わない?

971:デフォルトの名無しさん
22/07/14 08:21:48.07 E22ufzJOM.net
>>959
OCRか元データもらう以外の解決策があるなら、かなり聴きたい

972:デフォルトの名無しさん
22/07/14 08:24:09.60 lnbsEUJQM.net
OCRのがマシって回答出てるだろ
現実から目をそらすな

973:デフォルトの名無しさん
22/07/14 08:49:50.07 vNge93QI0.net
最初に「CSVなどで依頼しても無理でした」とか書いてくれれば無駄な争いは避けたのかもな

974:デフォルトの名無しさん
22/07/14 10:19:52.64 dxotV0yqa.net
>>947
++
>>949
++
>>951
ほんそれ

975:デフォルトの名無しさん
22/07/14 21:34:12.70 L5ignm6zd.net
A列のセルに列挙された複数単語の商品名から重複した単語のみを除くことは可能でしょうか?
A
1 RED BLUE APPLE
2 RED BLUE BANANA
3 RED BLUE GREEN ORANGE
4 RED BLUE YELLOW WHITE GRAPE
5 RED BLUE WHITE CHERRY
↑これらのデータを↓のように整形したいです。
B
1 APPLE
2 BANANA
3 GREEN ORANGE
4 YELLOW GRAPE
5 CHERRY
「RED BLUE APPLE」は同一セル内にスペースで区切られて入力されています。
データ量は1回あたり100行程度になります。セル内の単語、単語の数は毎回異なります。
ご教示いただけますと幸いです。よろしくお願いいたします。

976:デフォルトの名無しさん
22/07/14 21:34:41.90 TfuP8Uyl0.net
6進数?を通常の時刻表記に直す方法教えてください。
例)1.3→1:30
  2.45→2:45

977:デフォルトの名無しさん
22/07/14 21:37:17.58 TLlcUFbPa.net
>>965
A1に時間が入っているとして
=TIME(INT(A1),A1-INT(A1),0)

978:デフォルトの名無しさん
22/07/14 21:41:07.21 0fmyum11H.net
>>955
コミュ力の定義はなんですか?典型的なインデックスは何ですか?

979:デフォルトの名無しさん
22/07/14 21:44:41.57 zzetjp0td.net
>>964
可能です。
はい、次。

980:964
22/07/14 22:56:36.99 X42JNt2t0.net
>>968
ご回答いただきまして誠にありがとうございます。

981:デフォルトの名無しさん
22/07/14 23:23:30.65 BkEIWbQgd.net
>>964
自分ならだけどこんな感じかと Mainのループは最大行数を取得してくれ _をスペースに置き換えてくれ
Sub_Main()
____Dim_i_As_Long
____For_i_=_1


982:_To_5 ________Dim_a_As_String ________a_=_Cells(i,_1).Value ________Dim_j_As_Long ________For_j_=_1_To_5 ____________If_i_<>_j_Then ________________a_=_CutWord(a,_Cells(j,_1).Value) ____________End_If ________Next ________Cells(i,_2).Value_=_a ____Next End_Sub



983:デフォルトの名無しさん
22/07/14 23:23:50.53 BkEIWbQgd.net
Function_CutWord(a_As_String,_b_As_String)_As_String
____Dim_aa()_As_String
____aa_=_Split(a,_"_")
____Dim_bb()_As_String
____bb_=_Split(b,_"_")
____Dim_c_As_String
____c_=_""
____Dim_i_As_Long
____For_i_=_LBound(aa)_To_UBound(aa)
________Dim_j_As_Long
________For_j_=_LBound(bb)_To_UBound(bb)
____________If_aa(i)_=_bb(j)_Then
________________Exit_For
____________End_If
________Next
________If_j_>_UBound(bb)_Then
____________If_c_<>_""_Then
________________c_=_c_&_"_"
____________End_If
____________c_=_c_&_aa(i)
________End_If
____Next
____CutWord_=_c
End_Function

984:デフォルトの名無しさん
22/07/14 23:43:51.22 qWN4wD1T0.net
スレリンク(bsoft板:7番)
に似てる

985:デフォルトの名無しさん
22/07/14 23:52:28.92 fadaSACN0.net
気持ちわりぃなそのコード

986:デフォルトの名無しさん
22/07/15 00:00:11.50 9RgIX2Zba.net
>>973
どの辺りが?
それとも気持ち悪いって言いたかっただけ?

987:デフォルトの名無しさん
22/07/15 00:30:48.57 1ECLhEg6a.net
なんでスペースがアンダーバーなんだとは思うな
俺も見た目が受け付けなかったわ

988:デフォルトの名無しさん
22/07/15 00:48:33.55 kd+ZBNkRd.net
いや、そもそも自作自演だろ

989:デフォルトの名無しさん (ワッチョイ fdce-TkQT)
22/07/15 01:18:26 mFCZ39Ni0.net
Sub Main()
  Dim a As String
  Dim i As Long
  Dim j As Long
  For i = 1 To 5
    a = Cells(i, 1)
    For j = 1 To 5
      If i <> j Then a = CutWord(a, Cells(j, 1))
    Next
    Cells(i, 2) = a
  Next
End Sub

Function CutWord(a As String, b As String) As String
  Dim aa() As String
  Dim bb() As String
  Dim c As String
  Dim i As Long
  aa = Split(a, " ")
  bb = Split(b, " ")
  For i = LBound(aa) To UBound(aa)
    Dim j As Long
    For j = LBound(bb) To UBound(bb)
      If aa(i) = bb(j) Then Exit For
    Next
    If j > UBound(bb) Then
      If c <> "" Then c = c & " "
      c = c & aa(i)
    End If
  Next
  CutWord = c
End Function

990:964
22/07/15 02:31:06.28 bSLom3XEd.net
早速ご回答いただいた皆様、ありがとうございました!
ほぼ思い通りの結果を得ることができました。
ちなみにですが、
例えばA6に「DOG CAT RABBIT COW BEAR」というデータがある場合、
各単語がどれとも重複していないため「DOG CAT RABBIT COW BEAR」そのまま5単語が残ります。
各データのユニークな単語を最小数で残すことは可能でしょうか?
下記のような形です。
A
1 RED BLUE APPLE
2 RED BLUE BANANA
3 RED BLUE GREEN ORANGE
4 RED BLUE YELLOW WHITE GRAPE
5 RED BLUE WHITE CHERRY
6 DOG CAT RABBIT COW BEAR

B
1 APPLE
2 BANANA
3 GREEN ORANGE
4 YELLOW GRAPE
5 CHERRY
6 DOG
度々申し訳ございませんが、よろしくお願いいたします。

991:デフォルトの名無しさん
22/07/15 02:36:26.14 WFW52ORLM.net
いつものあいつだぞ

992:デフォルトの名無しさん (ワッチョイ fdce-TkQT)
22/07/15 06:01:47 mFCZ39Ni0.net
最小限の定義が不明

993:デフォルトの名無しさん
22/07/15 07:03:30.04 ymO8mssad.net
Sub Main()
  Dim a As String
  Dim i As Long, j As Long
  Dim last As Long
  last = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 1 To last
    a = Cells(i, 1)
    For j = 1 To last
      If i <> j Then a = CutWord(a, Cells(j, 1))
    Next j
    Cells(i, 2) = a
  Next i
End Sub
Function CutWord(a As String, b As String) As String
  Dim aa() As String
  Dim bb() As String
  Dim c As String
  Dim i As Long, j As Long
  aa = Split(a, " ")
  bb = Split(b, " ")
  For i = LBound(aa) To UBound(aa)
    For j = LBound(bb) To UBound(bb)
      If aa(i) = bb(j) Then Exit For
    Next j
    If j > UBound(bb) Then c = c & aa(i) & " "
  Next i
  CutWord = Trim(c)
End Function

994:デフォルトの名無しさん (スッププ Sd43-jVDF)
22/07/15 07:30:27 KClfAjojd.net
俺のコードをいじってくれてうれしいが
Valueとったり改行いじったりしてるだけで行数減らしてるだけなんて結局マイルールのこだわりを主張してるだけなんだよな
こんな方法あるぜってのが見たいわ

>>978
6が「DOG」になる最小数という意味が不明
先頭の単語を返すだけならCutWordの最後でaとcが同じ値になったらaa(LBound(aa))を返すようにすればいいのでは

995:デフォルトの名無しさん (アウアウウー Sa09-/dRU)
22/07/15 07:47:41 9RgIX2Zba.net
value取るのは


996:改悪で草



997:デフォルトの名無しさん (アウアウウー Sa09-DHlW)
22/07/15 08:08:12 DqNyEc18a.net
>>964
複数回現れる単語を削除すればいいのか?
Sub X964()
Dim Sheet As Worksheet: Set Sheet = ...
Dim Dictionary As Object: Set Dictionary = CreateObject("Scripting.Dictionary")
Dim LastRow As Long: LastRow = SheetSheet.Cells(Rows.Count, "A").End(xlUp).Row
Dim Row As Long
For Row = 1 To LastRow
Dim Word As Variant
For Each Word In Split(Sheet.Cells(Row, "A").Value, " ")
If Dictionary.Exists(Word) Then
Dictionary(Word) = Dictionary(Word) + 1
Else
Dictionary.Add Word, 1
End If
Next
Next
For Row = 1 To LastRow
Dim Uniques As String: Uniques = ""
For Each Word In Split(Sheet.Cells(Row, "A").Value, " ")
If 1 < Dictionary(Word) Then
If Uniques = "" Then
Uniques = Word
Else
Uniques = Uniques & " " & Word
End If
End If
Next
Sheet.Cells(Row, "B").Value = Uniques
Next
End Sub

998:デフォルトの名無しさん (アウアウウー Sa09-DHlW)
22/07/15 08:10:06 DqNyEc18a.net
>>973
気持ち悪いとは思わないけどちょっと非効率かなとは思う

999:デフォルトの名無しさん (ワッチョイ cbda-VQN5)
22/07/15 08:49:49 pxeFAKZo0.net
そのコードカッケェ!

1000:デフォルトの名無しさん (スフッ Sd43-TkQT)
22/07/15 09:42:45 D6klNH8hd.net
Sub sample3()
  Dim r As Long
  Dim z As Long '最終行
  Dim s As String '全データ
  Dim a() As String '単語リスト
  Dim i As Long
  z = Cells(Rows.Count, 1).End(xlUp).Row
  For r = 1 To z
    Cells(r, 2) = Cells(r, 1)
    s = s & Cells(r, 1) & " "
  Next r
  a = Split(s, " ")
  For i = LBound(a) To UBound(a)
    If Len(s) - Len(a(i)) > Len(Replace(s, a(i), "")) Then '2回以上出てくるか
      For r = 1 To z
        Cells(r, 2) = Trim(Replace(Cells(r, 2), a(i), "")) '各セルから削除
      Next r
    End If
  Next i
End Sub

1001:デフォルトの名無しさん (アウアウウー Sa09-jVDF)
22/07/15 09:47:20 kfkt8EAfa.net
効率どうこう言う前に重複した単語がでるような関数はどうかと思うのw

1002:デフォルトの名無しさん
22/07/15 13:22:47.81 kd+ZBNkRd.net
ここでRuby馬鹿がRubyではこうなるとか書くのは見えている

1003:デフォルトの名無しさん
22/07/15 19:00:37.71 f/pTHFXb0.net
オレンジ色のオレンジはどうなの?

1004:デフォルトの名無しさん
22/07/15 19:14:37.65 pxeFAKZo0.net
どんなに良コード書いても難癖付けられるのがこのスレ

1005:デフォルトの名無しさん
22/07/16 02:37:29.28 hVvvoOFI0.net
userformをshowした直後にunloadするとexcelが落ちるのは何とかならんかのぉ
hideじゃだめなんじゃunloadじゃないと

1006:デフォルトの名無しさん
22/07/16 07:52:34.81 1SMMBEmo0.net
UserForm1.Show vbModeless
Unload UserForm1
って意味なら、別に落ちなかったけど

1007:デフォルトの名無しさん
22/07/16 08:52:29.38 eHBMNsDF0.net
逆になんでhideじゃダメなの

1008:デフォルトの名無しさん
22/07/16 13:26:34.40 NLVpHfZz0.net
とりあえずEXCELが落ちるっていうコードと環境出せ
話はそれからだ

1009:デフォルトの名無しさん
22/07/16 18:00:44.38 2WLM14wy0.net
>>978
Ruby で作った
require "csv"
input_str = <<"EOT"
RED,BLUE,APPLE
RED,BLUE,BANANA
RED,BLUE,GREEN,ORANGE
RED,BLUE,YELLOW,WHITE,GRAPE
RED,BLUE,WHITE,CHERRY
DOG,CAT,RABBIT,COW,BEAR
EOT
csv = CSV.new( input_str )
input_ary = csv.read # 2次元配列
# 各単語の出現回数を数える。Hash の初期値は、0
hash = input_ary.each_with_object( Hash.new( 0 ) ) { |row, hash|
row.each { |word| hash[ word ] += 1 }
}
# 出現回数が2以上の単語を削除する
input_ary.map! { |row|
row.delete_if { |word| hash[ word ] >= 2 }
row
}
# 2次元配列を、CSV 文字列に変換する
csv_str = input_ary.map( &:to_csv ).join
puts csv_str

1010:デフォルトの名無しさん
22/07/16 19:45:04.74 vYu+PcKIa.net
>>996
廃止決定した言語じゃん

1011:デフォルトの名無しさん
22/07/17 00:22:00.69 lEW2LcQY0.net
あんたら色んな言語を習得していてエリートなんだな?
5ちゃんねるなんかにいてもったいねーわ

1012:デフォルトの名無しさん
22/07/17 02:44:22.32 rPHWMq+g0.net
>>995
993と同じ、2行だけ
エクセルは2013
>>994
閉じたWebbrowserを再表示する方法がわからないので仕方なく

1013:デフォルトの名無しさん
22/07/17 04:50:23.78 fLi6s9i70.net
こいつの書くコード、rubyとしてもクソコードなのがほんとひどい

1014:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 2時間 26分 42秒

1015:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch