Excel VBA 質問スレ Part76

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ブーイモ MMff-XZ6m)2022/05/01(日) 02:23:41.78ID:2t63WK/jM
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること

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

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part75
https://mevius.5ch.net/test/read.cgi/tech/1644384272/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

0952デフォルトの名無しさん (ワッチョイ cbda-VQN5)2022/07/13(水) 22:51:54.33ID:bvCBiwjA0
とはいっても取引先からのデータは大半がpdfだからなぁ

0953デフォルトの名無しさん (スフッ Sd43-TkQT)2022/07/13(水) 23:54:44.21ID:vJ6Ng0OKd
そんなもん会社によるだろ
言えばExcelやCSVで送ってくれるとこも普通にある

0954デフォルトの名無しさん (ワッチョイ 2302-ws48)2022/07/14(木) 00:12:44.49ID:X42JNt2t0
マーキングするために会社の上司が部下の女に触りまくってるじゃん

0955デフォルトの名無しさん (スプッッ Sd03-PZPQ)2022/07/14(木) 07:26:28.96ID:5ehEa+FTd
技術力だけで生きていくか、コミュ力も高めて生きていくかの「差」が今回の質問で明らかになったね

今回の場合、コミュ力あるやつならとっくに客先はpdfとは別にcsvとかテキストファイルを送る方向で動いてるよ

俺はコミュ力を高めていく
お前らは今後も無理難題をひたすら解決する技術力を高めていけw

今回のデータをcsvで頂戴したく存じます

コミュも何も一行メール送るだけでいいだろう
むしろこれ出来ないなら何もできんだろ

0957デフォルトの名無しさん (アウアウウー Sa09-DHlW)2022/07/14(木) 08:06:18.41ID:KsBnasMha
社内規定で社外に送信するデータはPDFとなっておりますので、ご期待に沿えず申し訳ありません。

0958デフォルトの名無しさん (JP 0H2b-beHi)2022/07/14(木) 08:12:38.64ID:1tikFi/NH
そういうコミュニケーションとれない奴は、
仕様を決めるときにもコミュニケーションとれないから思い込みで作るまである

0959デフォルトの名無しさん (スッップ Sd43-jJDy)2022/07/14(木) 08:14:11.08ID:YsqOWTP3d
根本解決を目指すアドバイスはいいけど、どんなデータかも質問者と客先の状況も分からないのに、データ貰えば解決(ドャァは乱暴じゃない?

少なくともwordで開いても文字認識がまばらだったりするって時点で、綺麗な様式から出力したデータじゃないのは確かだし、質問者がそういう回答を求めてないとは思わない?

>>959
OCRか元データもらう以外の解決策があるなら、かなり聴きたい

OCRのがマシって回答出てるだろ
現実から目をそらすな

0962デフォルトの名無しさん (ワッチョイ bd49-ezAM)2022/07/14(木) 08:49:50.07ID:vNge93QI0
最初に「CSVなどで依頼しても無理でした」とか書いてくれれば無駄な争いは避けたのかもな

0963デフォルトの名無しさん (アウアウウー Sa09-2HoA)2022/07/14(木) 10:19:52.64ID:dxotV0yqa
>>947
++
>>949
++
>>951
ほんそれ

0964デフォルトの名無しさん (スッププ Sd43-CglE)2022/07/14(木) 21:34:12.70ID:L5ignm6zd
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行程度になります。セル内の単語、単語の数は毎回異なります。

ご教示いただけますと幸いです。よろしくお願いいたします。

0965デフォルトの名無しさん (ワッチョイ 1baa-2HoA)2022/07/14(木) 21:34:41.90ID:TfuP8Uyl0
6進数?を通常の時刻表記に直す方法教えてください。
例)1.3→1:30
  2.45→2:45

0966デフォルトの名無しさん (アウアウウー Sa09-/dRU)2022/07/14(木) 21:37:17.58ID:TLlcUFbPa
>>965
A1に時間が入っているとして
=TIME(INT(A1),A1-INT(A1),0)

0967デフォルトの名無しさん (US 0Ha3-TUM9)2022/07/14(木) 21:41:07.21ID:0fmyum11H
>>955
コミュ力の定義はなんですか?典型的なインデックスは何ですか?

0968デフォルトの名無しさん (スプッッ Sd43-iSZE)2022/07/14(木) 21:44:41.57ID:zzetjp0td
>>964
可能です。
はい、次。

0969964 (ワッチョイ 2302-ws48)2022/07/14(木) 22:56:36.99ID:X42JNt2t0
>>968
ご回答いただきまして誠にありがとうございます。

0970デフォルトの名無しさん (スッップ Sd43-jVDF)2022/07/14(木) 23:23:30.65ID:BkEIWbQgd
>>964
自分ならだけどこんな感じかと Mainのループは最大行数を取得してくれ _をスペースに置き換えてくれ
Sub_Main()
____Dim_i_As_Long
____For_i_=_1_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

0971デフォルトの名無しさん (スッップ Sd43-jVDF)2022/07/14(木) 23:23:50.53ID:BkEIWbQgd
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

0972デフォルトの名無しさん (ワッチョイ fdce-TkQT)2022/07/14(木) 23:43:51.22ID:qWN4wD1T0

0973デフォルトの名無しさん (ワッチョイ cbda-VQN5)2022/07/14(木) 23:52:28.92ID:fadaSACN0
気持ちわりぃなそのコード

0974デフォルトの名無しさん (アウアウウー Sa09-/dRU)2022/07/15(金) 00:00:11.50ID:9RgIX2Zba
>>973
どの辺りが?
それとも気持ち悪いって言いたかっただけ?

0975デフォルトの名無しさん (アウアウウー Sa09-MhTr)2022/07/15(金) 00:30:48.57ID:1ECLhEg6a
なんでスペースがアンダーバーなんだとは思うな
俺も見た目が受け付けなかったわ

0976デフォルトの名無しさん (スプッッ Sd43-iSZE)2022/07/15(金) 00:48:33.55ID:kd+ZBNkRd
いや、そもそも自作自演だろ

0977デフォルトの名無しさん (ワッチョイ fdce-TkQT)2022/07/15(金) 01:18:26.31ID:mFCZ39Ni0
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

0978964 (スッップ Sd43-CglE)2022/07/15(金) 02:31:06.28ID:bSLom3XEd
早速ご回答いただいた皆様、ありがとうございました!
ほぼ思い通りの結果を得ることができました。

ちなみにですが、
例えば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

度々申し訳ございませんが、よろしくお願いいたします。

0979デフォルトの名無しさん (ワンミングク MMa3-p0Nn)2022/07/15(金) 02:36:26.14ID:WFW52ORLM
いつものあいつだぞ

0980デフォルトの名無しさん (ワッチョイ fdce-TkQT)2022/07/15(金) 06:01:47.46ID:mFCZ39Ni0
最小限の定義が不明

0981デフォルトの名無しさん (スフッ Sd43-TkQT)2022/07/15(金) 07:03:30.04ID:ymO8mssad
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

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

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

0983デフォルトの名無しさん (アウアウウー Sa09-/dRU)2022/07/15(金) 07:47:41.51ID:9RgIX2Zba
value取るのは改悪で草

0984デフォルトの名無しさん (アウアウウー Sa09-DHlW)2022/07/15(金) 08:08:12.42ID:DqNyEc18a
>>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

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

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

0987デフォルトの名無しさん (スフッ Sd43-TkQT)2022/07/15(金) 09:42:45.28ID:D6klNH8hd
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

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

0989デフォルトの名無しさん (スプッッ Sd43-iSZE)2022/07/15(金) 13:22:47.81ID:kd+ZBNkRd
ここでRuby馬鹿がRubyではこうなるとか書くのは見えている

0990デフォルトの名無しさん (ワッチョイ 4bda-TkQT)2022/07/15(金) 19:00:37.71ID:f/pTHFXb0
オレンジ色のオレンジはどうなの?

0991デフォルトの名無しさん (ワッチョイ cbda-VQN5)2022/07/15(金) 19:14:37.65ID:pxeFAKZo0
どんなに良コード書いても難癖付けられるのがこのスレ

0992デフォルトの名無しさん (ワッチョイ 05da-k1yI)2022/07/16(土) 02:37:29.28ID:hVvvoOFI0
userformをshowした直後にunloadするとexcelが落ちるのは何とかならんかのぉ
hideじゃだめなんじゃunloadじゃないと

0993デフォルトの名無しさん (ワッチョイ 9d5f-GsVe)2022/07/16(土) 07:52:34.81ID:1SMMBEmo0
UserForm1.Show vbModeless
Unload UserForm1

って意味なら、別に落ちなかったけど

0994デフォルトの名無しさん (ワッチョイ 5a42-PUxa)2022/07/16(土) 08:52:29.38ID:eHBMNsDF0
逆になんでhideじゃダメなの

0995デフォルトの名無しさん (ワッチョイ 912f-cIkS)2022/07/16(土) 13:26:34.40ID:NLVpHfZz0
とりあえずEXCELが落ちるっていうコードと環境出せ
話はそれからだ

0996デフォルトの名無しさん (ワッチョイ 762c-lpz1)2022/07/16(土) 18:00:44.38ID:2WLM14wy0
>>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

0997デフォルトの名無しさん (アウアウウー Sa39-eHP4)2022/07/16(土) 19:45:04.74ID:vYu+PcKIa
>>996
廃止決定した言語じゃん

0998デフォルトの名無しさん (ワッチョイ 5ada-XFSu)2022/07/17(日) 00:22:00.69ID:lEW2LcQY0
あんたら色んな言語を習得していてエリートなんだな?
5ちゃんねるなんかにいてもったいねーわ

0999デフォルトの名無しさん (ワッチョイ 05da-k1yI)2022/07/17(日) 02:44:22.32ID:rPHWMq+g0
>>995
993と同じ、2行だけ
エクセルは2013

>>994
閉じたWebbrowserを再表示する方法がわからないので仕方なく

1000デフォルトの名無しさん (ワッチョイ 5a63-4HbS)2022/07/17(日) 04:50:23.78ID:fLi6s9i70
こいつの書くコード、rubyとしてもクソコードなのがほんとひどい

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

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。