Excel VBA 質問スレ Part49©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

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

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/08/23(水) 08:11:08.70ID:OKqU/Ui90
>>932
実際に何をやったの?
2017/08/23(水) 08:15:41.26ID:RC4smTF3a
>>932
イベントが間違ってる
そんなん条件付き書式でよくね?
935デフォルトの名無しさん (アウアウウー Sa85-mYeN)
垢版 |
2017/08/23(水) 08:18:48.53ID:EgpJbwY2a
コードは
private sub worksheet_change(ByVal
target as range)
If target.address〈〉"A1" then exit sub
If Target = "1" then Activesheet.Tab.ColorIndex = 9
If Target = "2" then Activesheet.Tab.ColorIndex = 3
End Sub

初心者ですのでここはこうした方がいいなどアドバイスいただけると幸いです
2017/08/23(水) 08:29:58.52ID:OKqU/Ui90
>>935
エラーになる
937デフォルトの名無しさん (アウアウウー Sa85-mYeN)
垢版 |
2017/08/23(水) 08:33:36.33ID:EgpJbwY2a
>>934
シートのタブ色変更なんですが条件付き書式でできますか?
2017/08/23(水) 08:36:18.74ID:OKqU/Ui90
>>932
どちらでも変わったけど
A1=SUM(1)
A1=SUM(2)
2017/08/23(水) 08:47:09.36ID:13NrMZgc0
>>925
それはお前が信用されてないからでわw
2017/08/23(水) 08:49:04.48ID:13NrMZgc0
>>937
条件付き「書式」なんだから、そういう事をするための物だよ
2017/08/23(水) 09:21:19.41ID:+0TvjQ0a0
>>935
"1"と"2"の両脇の"外したら動かないか?
2017/08/23(水) 10:06:33.42ID:zci6CT9Ca
>>935
色が変わったあとに1,2以外が入っても戻らない
943デフォルトの名無しさん (アウアウウー Sa85-mYeN)
垢版 |
2017/08/23(水) 10:15:50.03ID:EgpJbwY2a
>>940
ご教示下さい
944デフォルトの名無しさん (アウアウウー Sa85-mYeN)
垢版 |
2017/08/23(水) 10:23:11.79ID:EgpJbwY2a
>>941
動きませんでした
945デフォルトの名無しさん (アウアウウー Sa85-mYeN)
垢版 |
2017/08/23(水) 10:24:44.20ID:EgpJbwY2a
>>942
A1の数字は一定期間ごとに変化するんですがそれには対応できないということになりますか?
2017/08/23(水) 10:47:29.53ID:N2QxNW8Oa
>>937
ごめんタブか
2017/08/23(水) 11:13:45.38ID:yxvWLKA00
>>935
そもそも
Target.addressって絶対参照が返ってくるんじゃなかったっけ?
でもそれなら手入力でも反映されない気がするなぁ

あと、たとえばB1のセルを変更してA1の計算結果が変わったとしても
A1の数式を変更したわけじゃないから
targetにはB1が渡されるだけじゃない?

全部予想ですまん
2017/08/23(水) 12:01:09.88ID:QSg8qhxn0
>>935
Worksheet.Change イベント (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff839775.aspx
>セルが再計算時に変更されると、このイベントは発生しません。シートの再計算をトラップするには、Calculate イベントを使用します。
949デフォルトの名無しさん (アウアウウー Sa85-mYeN)
垢版 |
2017/08/23(水) 13:56:51.41ID:EgpJbwY2a
>>948
ありがとうございますどう組んでいいかわからないので
Worksheet_change
calculateを調べてみます
2017/08/23(水) 18:51:26.23ID:Rd2CDMDCM
A1セルの数式を変えていいならユーザー定義関数でできる
例えばA1に=Sum(B1:B2)と定義してるなら標準モジュールに
Function XXX(R As Range) As Double
Dim Result As Double
Result = Application.WorksheetFunction.Sum(R)
Select Case R
Case 1: ActiveSheet.Tab.ColorIndex = 9
Case 2: ActiveSheet.Tab.ColorIndex = 3
End Select
XXX = R
End Function
を定義してA1セルを=XXX(B1:B2)に書き換えればいい
2017/08/23(水) 18:54:14.54ID:Rd2CDMDCM
すまんちょっと間違えてたわ
Function XXX(R As Range) As Double
Dim Result As Double
Result = Application.WorksheetFunction.Sum(R)
Select Case Result
Case 1: ActiveSheet.Tab.ColorIndex = 9
Case 2: ActiveSheet.Tab.ColorIndex = 3
End Select
XXX = Result
End Function
2017/08/24(木) 01:43:32.58ID:gFPKAoW/0
>>935
ちなみに<> を半角にして、"A1" を "$A$1" にしたら変わったぞ
2017/08/24(木) 02:23:07.38ID:gFPKAoW/0
>>935
もしA1に=SUM(B1:B2) ってなっているなら

If Cells(1, 1) = "1" Then ActiveSheet.Tab.ColorIndex = 9
If Cells(1, 1) = "2" Then ActiveSheet.Tab.ColorIndex = 3

これだけでいけた Target は変更(入力)した場所が入っているから
2017/08/24(木) 05:57:45.02ID:H9WPuZGK0
SUMとしか言ってないので後だしっぽいが
=SUM(Sheet2!B1:B2)は考えなくていいかな
2017/08/24(木) 21:45:58.84ID:fiG1XOAx0
>>925
じゃあ関数ならわかるだろうと思って、
IFだらけのクソ長い関数作ってやったわ。

それもわからんて言われたけど。
当たり前か。
2017/08/24(木) 22:13:24.34ID:H9WPuZGK0
そのツールでやってるのは上司も知ってる?
それでも使わない?
何かあれば責任の所在は明らかなのに
2017/08/24(木) 23:00:01.92ID:q91vBAgZ0
ADOでエクセル上にあるテーブルに接続していますが、
テキストデータを追加したり、更新したりすると先頭にシングルクォテーションが付いてしまいます。
これは仕様だと思いますが、付かないようにする方法ないでしょうか?
後から消すって方法は無しでお願いします。
2017/08/25(金) 01:43:07.95ID:KTLmtMM0r
>>914
> エクセルアップロードして終わりとかにして欲しいんだけど。

システムへの大量レコードのアップロードって、ミスした時が大変なのよ。
アップロードするファイルを間違えたりするやつが必ずいるから。

場合によっては、システムを停めて修正しなければならなくなる。

なので、コピペによる数百件の手入力は言わば安全策。
派遣スタッフが多い職場でありがちだよね。

というわけで、手入力作業をIE制御で自動で行うツールはどうしても必要になるんだけど、エラートラップ(例外処理)をきちんと作り込まないと逆に使いづらくなるので要注意。
2017/08/25(金) 02:02:02.49ID:jgB7N/LP0
>>957
コードは?
2017/08/25(金) 06:46:28.19ID:eH4j8CdN0
>>957
元データに入ってる、というオチではない?
2017/08/25(金) 07:59:18.90ID:s9vD7wq8M
>>958
> アップロードするファイルを間違えたりするやつが必ずいるから。
そんな奴はコピペでも間違えたファイルからコピペするだろ w
2017/08/25(金) 08:16:24.76ID:fNT5yRt6a
大量のデータをエクセルでやるのに無理がある
2017/08/25(金) 08:39:54.31ID:ZY8b+JLd0
>>962
エクセルだと無理ってことはアクセス使えってこと?
余計に問題が増えそうだが
2017/08/25(金) 11:34:23.91ID:9EHfqskZd
>>958
なるほど
レコード数に関係なく一定の手間でできるとなると、一瞬で大量のエラーを発生させるやつが出てくるな
2017/08/25(金) 12:46:59.96ID:4kzNGnM2a
>>956
そういう責任問題はマクロや関数使わなくても同じ話。
というか、コンピューター使ってる時点で駄目だろ。

最後は何やってもお前のコンピューターの使い方が悪いという話になる。
2017/08/25(金) 12:55:04.81ID:4kzNGnM2a
>>958
それはそういうシステム作った奴が悪い。
いくらでも規定のフォーマットじゃなければ受け付けないシステムは作れるだろ。

CSVなんかでもカンマ区切りじゃなくて普通ならどうやってもキーボード入力出来ない文字で区切るなんてやるし。
それで区切ってなければ1行のデータ数不正で受け取らないなんて簡単。
それ以外にもチェック項目入れてEXCEL上で出力編集できるプログラム組めば良いし。
2017/08/25(金) 13:18:40.53ID:11RxMW0L0
>>966
データの中身が間違っているものをアップロードしてしまうことを言ってるんじゃないだろうか
2017/08/25(金) 14:22:18.70ID:jgB7N/LP0
正しいデータを入れなおして直るならいいんだけど
取り返しのつかないミスで業務に支障がでたら知らん
2017/08/25(金) 15:30:41.90ID:7eimf3NdH
>>958
データのバリデーションが足りてないだけでしょ
970デフォルトの名無しさん (ササクッテロ Sp6d-Hgyh)
垢版 |
2017/08/25(金) 16:19:40.23ID:YOvDFOChp
バックアップを取ってリカバリしないの?
2017/08/25(金) 18:19:08.43ID:ljcbkcPnp
>>958
ウチの会社にもいましたわ、こんな事やらかす人達。
所詮、人間がやる事ですけど。
2017/08/25(金) 18:24:10.85ID:KTLmtMM0r
>>966
フォーマットの問題じゃないんだよね。

アップ済みのファイルを再度アップしてしまったり、修正前のファイルをアップしたりとか、フォーマットに問題はないのでシステムは受け付けてしまう。

その辺をリカバリできるシステムにしようとするとまた莫大な金がかかるので、上はなかなか動かない。

それによってどのくらいのコスト削減あるいは利益が見込めるのか、まずは数字出さないと話も聞いてもらえないよ。
2017/08/25(金) 22:45:26.71ID:jbJbRr/0a
>>972
???
後からでも受け付けるようにするだけだろ。
別に難しくないだろ。
後からアップしたのでデータ上書きすれば良い。
もちろん戻れるように履歴取る必要は有るけど。
2017/08/25(金) 23:17:31.65ID:11RxMW0L0
>>973
たぶんキーが無いんじゃない?
2017/08/26(土) 07:13:30.51ID:vvYv5Hier
>>973
働いたことないの?
2017/08/26(土) 07:22:16.86ID:vvYv5Hier
>>974
一応、ファイルのフォーマットにはユニークなカラムはあるんだけどね。
システム側では、そのカラムはキーになってない。。。と思われ。

さすがにシステムの仕様まではわからない。
977デフォルトの名無しさん (ワッチョイ 1d4b-rG16)
垢版 |
2017/08/26(土) 09:32:33.78ID:5dccF0/k0
>>931
ありがとうございます。
あれから色々試しましたがいくつか問題点があります。

問題1
Dim el As IHTMLElement を削除するとTDが取得出来ず、table丸ごとの取得となります。
問題2
Dim htmlDoc As HTMLDocument を削除するとエラーが出ます。
問題3
7番目のサンプルを実行するとこの部分がエラーをおこします。
objDOM.body.innerHTML = objXML.responseText

問題1についてtableデータ丸ごとでも取得後必要箇所を抜き出せばいいので用は足せます。
変わらなければそのままいこうと思っていますが相手サーバーへの負担は増えるのでしょうか?

問題2について削除しなければ問題ありませんがxml化時に下記3箇所をどのように記載を変更すればいいでしょうか?
Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document
Set colTable = htmlDoc.getElementsByName("oppai")

問題3について下記の("htmlfile")が原因かと思ったのですがこのままでいいでしょうか?
それとも何かのシート名を入れるのでしょうか?
Set objDOM = CreateObject("htmlfile")

毎度すいませんがよろしくお願い致します。
2017/08/26(土) 13:59:12.95ID:1Xp/S2sl0
>>958
>システムへの大量レコードのアップロードって、ミスした時が大変なのよ。
>アップロードするファイルを間違えたりするやつが必ずいるから

人間は、必ず間違うから、絶対に回復機能が必要。
普通は、バックアップ・スナップショット機能で、前の状態へ戻れる

銀行では、アルバイト3人が、同じデータを入力する。
3人とも同じ金額の時だけ、合格

バリデ、validation
2017/08/26(土) 14:10:14.30ID:1Xp/S2sl0
>>977
JavaScript の、jQuery でやれば?
Groovy, Ruby でも良いし

何で、VBA でやる?
VBAには、クロージャがあるのか?

最初から、ライブラリが揃っている言語を、使えば良いだけ
2017/08/26(土) 14:14:47.08ID:svByvDEZ0
>>978
>銀行では、アルバイト3人が、同じデータを入力する。
どこの銀行だよwww聞いたことないわwww
2017/08/26(土) 15:49:08.64ID:O53zOlu10
データを2人で入力してチェックするのは割りと普通
https://www.noc-net.co.jp/blog/2015/06/column_050/
重要な奴なら3重チェックもあるんじゃね
2017/08/26(土) 16:55:31.30ID:azDqTcfP0
>>972
>アップ済みのファイルを再度アップしてしまったり、修正前のファイルをアップしたりとか、

間違ったと気づいた時点でオペレータ自身が元に戻せるような仕組みを作るのはそれほど難しくないよ
手動でExcelを修正するステップやその前のステップを含めてシステム化するのが理想ではあるだろうけどね

ただ100~300万くらいのお金を莫大な金と言ってるんであれば自力で頑張るしかない
担当が変われば元の木阿弥だし、本来機械にやらせるべき仕事を人間がやってることによる逸失利益を加味したら安い買い物
2017/08/26(土) 17:26:45.76ID:O53zOlu10
>>982
要件も確認しないうちから
> 間違ったと気づいた時点でオペレータ自身が元に戻せるような仕組みを作るのはそれほど難しくないよ
とか言うアホ営業 w
2017/08/26(土) 17:45:46.64ID:6HYM9FnY0
在庫と直結するようなシステムだと現物が関わるからタイミングによっては取り戻すの大変だしね。
2017/08/26(土) 17:49:54.05ID:azDqTcfP0
>>983
ははは、言いたいことはわかるけどそれは客が要件をすべて決めると思ってるやつの発想
費用に応じて提供出来る内容を変えてあげればいいだけ
そういう調整が出来ない人ばっかりだと苦労するよね

まあそこは論点じゃなく莫大な費用がかかると思ってるのは解決方法の選択肢が見えてないだけで
思ってるほどの費用がかからない方法も有るよってことよ
VBAのかわりにスクリプト書くだけなら100万もいらんし
2017/08/26(土) 17:55:27.18ID:azDqTcfP0
>>984
それは今でも発生しうる業務フローの問題でしょ?
誰かが確認するっていうステップが必要なだけで1件1件コピペ入力しなきゃいけないのとは別問題
確認が必要ならそのフローをシステムに取り込んであげればいい

機械で自動確認できるほうが楽だけどそれは必須じゃないじゃん
2017/08/26(土) 17:56:27.22ID:azDqTcfP0
Excel関係ない気がするからこの辺にしとくわ
2017/08/26(土) 18:39:24.64ID:O53zOlu10
>>985
> まあそこは論点じゃなく莫大な費用がかかると思ってるのは解決方法の選択肢が見えてないだけで
だから要件も見えてないのに選択肢が見えるわけないだろ w
>>984の件も数件なら後追いで修正できるけど1万件とかになると破綻するとかあるだろうし
2017/08/26(土) 19:30:25.78ID:qX5fc/S5a
株かなにかで金額間違えてニュースになったな
2017/08/26(土) 19:42:35.36ID:eHXsO5oX0
あれはトレーダーによる入力だからそれ自体が一次情報
複数人による入力対象ではない
2017/08/26(土) 21:03:15.65ID:F72uLJPi0
いつから問題の対象が
複数人による入力
に限定されるようになったんだ
2017/08/26(土) 22:10:58.71ID:eHXsO5oX0
さあ
2017/08/27(日) 02:42:06.83ID:L7AzHdYH0
>>914
> こんなのはスクリプトでも手作業でもなく、エクセルアップロードして終わりとかにして欲しいんだけど。
と書いた時から、サーバ側も巻き込んだシステム全体の話になってしまって
このスレの範疇を越えるものになったんだろうな
それは多分「単純作業をVBAでなんとかしたい」と思ってただけの>>914にとって
「そんなことを議論されても俺にはどうしようもない・・・」と思ってると思う
2017/08/27(日) 09:42:07.86ID:M71tiO6/0
2017/08/27(日) 10:41:40.78ID:hneRKt3Sa
>>993
そもそもは>>958が手入力を安全策とか言い出したことからだろ。

手入力なんて全く安全策じゃないし、コンピューターを使う以上、安全性を追求しすぎると本末転倒になるという話。
2017/08/27(日) 12:36:10.64ID:9rRkVsmFa
銀行でバイトに入力させるとかないだろ
2017/08/27(日) 12:40:26.06ID:LjjEWylk0
>>996
あるよ。金融業だけど、新規口座の個人情報入力は子会社の派遣君がやってた。
チェックは正社員がやる。

振込処理なんかはもちろん、絶対にないw
2017/08/27(日) 12:40:42.78ID:LjjEWylk0


Excel VBA 質問スレ Part50 [無断転載禁止]?2ch.net
https://mevius.2ch.net/test/read.cgi/tech/1503805217/l50
2017/08/27(日) 13:14:20.45ID:EGaKBA6h0
>>998
2017/08/27(日) 13:34:20.02ID:rBvqwKY30
ぬるぽ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 62日 11時間 19分 6秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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