Excel VBA 質問スレ Part62
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part61
http://mevius.5ch.net/test/read.cgi/tech/1556203263/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 皆さん無知はいいんですよ
誰でも知らないこと、間違って理解してることはあるんだから
だけど知ったような口をきくから叩かれるのですよ
気をつけましょうね オートフィルターで抽出条件を変数にして繰り返し処理で1ずつ加算していくことは出来ませんか?
下記では出来ませんでした。
For i = 1 to 10
Range("A1").AutoFilter _
Field:=2, Criteria1:="i"
next 何故ダブルクォーテーションで括ろうとしたのか全く意味不明。 なるほど!ありがとうございます。最初記録させてそれを元に1つずつやろうと思って、その名残で囲っていました。
助かります! 中二病みたいな感じにしたらこうかな?
┌→ FoR Z = 1 ─┐
│ └→ 10
│ RANgE("A1").AutoF F = 2, C = Z
│ │
└┐ │
└ NExT │
↓
× VBAができるようになると、xlsmのファイルの中には、普通のワークブック関数って使ったりしないんですか?
例えば、セルの値を別のセルに入れたりとか、if関数とか、簡単なものも
全部 VBAで書いたりするんですか??
それとも混在するんですかね?? >>16
マクロでないと出来ないことをするために使うのが普通 >>16
処理の内容によって関数の方が良い場合とVBAの方が良い場合がある。
だから内容次第。
混在もあり得る。
でもVBAメインで考えてる時は関数のことは忘れがちで全部VBAにしてしまうことも多い。
あと、自分が組む場合はそもそも関数じゃ無理な処理が多い。 >>16
しない。
VBAが出来るようになると、発想自体が変わるから。
手で数字を入れて、計算式で答えを出す、みたいな使い方にならなくなる。
コマンドボタンを押すと、Webとかデータベースから自動で情報を探してきて、
シートに必要な答えだけを表示するとか、そんな使い方になる。 >>16
ワークシート関数の方が100倍早いからできないことだけVBAを使う >>21
それは関数とかバージョンによると思うけど・・。
2013のVLOOKUPなら、VBA+SQLの方が何倍も速いし。 超初心者へのアドバイスなんだからザックリでいいんだよ だな
>>16
ワークブック関数ていうものは使ったことないから分からないスマン 意味なくマクロ仕込んでるファイルは嫌われるので関数で済むものはなるべくそちらで ワークシート関数でできることはワークシート関数で済ませて
データの差し替えとかそういうところだけVBAを使う そうすると関数とVBAの2つを覚える必要があるからVBAで出来るならBBAでやるのが簡単 コンセンサスは無いけど実務上>>26が一番安定するな 無駄にVBA使われてると「これ作った人承認欲求強いんかな」って思うわ
臨機応変に使い分けできる方がいい 基本ワークシート使って無理なものはVBAかな
そもそもワークシート使わないならVBAも使わないな 式が長くなったり作業列がいくつも必要になるような処理はVBAだわ
深いネストとか配列数式とか使うのもいいけど、ワークシート関数だけにこだわると、見通しや保守性が悪くなることもあるし
地味に厄介なのが条件付き書式
これも他人が作ったのを保守すると地獄を見ることになる 保守性で考えると名前の定義が割と曲者
大抵ぶっ壊れてる >>32
> 地味に厄介なのが条件付き書式
> これも他人が作ったのを保守すると地獄を見ることになる
頑張ってA1:A10に設定したのに次に見たらA1:A3,A4,A5:A7,A8:A9,A10に分割されてたり
マージしろとまでは言わないけど設定した奴を崩すなよ… 条件付き書式が壊れるのは仕様らしいぞ
よって改善される見込みも薄い 関数と条件付き書式は被害者。
これ自体は何も悪くないのに、知らないうちに壊すアホのせいで、
糞みたいに思われてる。 ちょっとニッチな質問失礼します。
バーコードによる品物管理のvbaの検討中です。
バーコードをスキャンした際に、数字に交じって、
グループセパレータ(GS) Asciiコード(0x1d)が出力されるタイプのバーコードを
スキャンした際、文字として存在しない、Ascii 0x1dが入力されたことを検知する術は
何かあるでしょうか。
スキャンしたデータは例えば、0000(0x1d)1234という形でスキャナから飛んできてるはずなのですが、
エクセル上の表記は、当然ながら00001234となってしまいます。
飛んでくる文字のasciiコードを逐一キャッチできれば、0x1dを検知できるかと思うのですが、
vbaでそんなこと可能でしょうか。 >>41
方法は読み取り機ごとに違う
機種によって可能だったり困難だった不可能だったりする
詳細はメーカーに問い合わせるしかない >>41
どういう形でスキャン結果が来るのか知らんけど、文字列であれば
chr系の関数で一文字ごとに判定してみれば >ちょっとニッチな質問失礼します。
ここの用途不明の質問に比べたら、
バーコードなんて超普通。 >>41
検知するだけだったら
0< InStr(s, ちゃー(&H1d))
ではダメなの? バーコードリーダーを買い換える
二千円くらいであるでしょ おれはUSB-COMでの読取りに挑戦してるけど
なかなかうまくいかないわ スマホアプリ使ってるな
COGNEXのSCANNERってやつ
>>41
2つに分けたほうが良いと思う
・バーコードスキャン、文字をセルに入力
・入力したセルに対してvbaでfindか何かで検知。changeイベントになると思う >>41
隣のセルで数値変換するか
そのセルの形式を数値にするではだめ? >>49
> 2つに分けたほうが良いと思う
それなんの意味があるんだ? >>30
拡張子が.xlsmだったからどんなコードが書かれてるのかと
エディタ開いて見てみたらModule1, Module2, Module3と並んでて
全部、なんもコード書かれてなく、各SheetやWorkbookにも全くコードが書かれてなかったわ >>51
入力中の文字を触るのはIMEやらオートコンプリートやらと競合して、あまり良くない
セルの内容を確定させてから、改めて触ったほうが良い ここ数週間、入門本とかサイトとか見ながら勉強して、
渾身のコードができたんだけど、誰か批評してくれるかい??
脱初級者になったか見て、アドバイス欲しいんだけど… >>54
半年間そのコードを見ずに放置してから
もう一度そのコードを見てみて何やってるのか
サクッと分かれば脱初級者 >>55
なるほど。。。
>>56
ありがとうございます。
ちょっと長すぎて書き込みエラーになりました
分割して貼ります お願いします・・・
Option Explicit
Sub 明細書作成()
Dim wsMeisai As Worksheet
Set wsMeisai = worksheets("明細書")
Dim wsData As Worksheet
Set wsData = worksheets("データ")
Dim wsSettei As Worksheet
Set wsSettei = worksheets("設定")
'明細書シートの表の基点
Dim meisaiKiten As Range
Set meisaiKiten = wsMeisai.Range("o8")
'データシートの票の基点
Dim dataKiten As Range
Set dataKiten = wsData.Range("A5")
'設定シートの組合員リストの基点
Dim listKiten As Range
Set listKiten = wsSettei.Range("A3") '########### 転記 ###########
'明細シートの組合員を定義(オブジェクトじゃないので注意)
Dim kumiaiin As String
kumiaiin = wsMeisai.Cells(7, 3)
'------- 設定シートの組合員リストから検索して正式名を転記 ------
' 検索回数定義
Dim a As Long
For a = 0 To 14
If wsSettei.Cells(listKiten.Row + a, 1) = kumiaiin Then
'ヒットしたものを転記
meisaiKiten.Offset(-4, 0).Value = listKiten.Offset(0 + a, 1).Value & " 御中"
End If
Next a
'------- 請求月の転記 ------
meisaiKiten.Offset(-2, 5).Value = wsMeisai.Cells(15, 3) '########### 昇順ソート ###########
'データシートの票をソート(アクティブにしないとエラー)
wsData.Activate
wsData.Range(dataKiten, Cells(dataKiten.CurrentRegion.Rows.Count + 1, 6)).Sort _
key1:=dataKiten, _
order1:=xlAscending
wsMeisai.Activate '############ 検索 #############
'明細書の票をクリア
wsMeisai.Range(meisaiKiten, meisaiKiten.Offset(30, 5)).ClearContents
'明細書の票の行数定義
Dim meisaiRow As Long
meisaiRow = 0
'検索回数を定義
Dim i As Long
For i = 0 To dataKiten.CurrentRegion.Rows.Count - 2
'--------日付での検索--------
Dim firstDate As Date
Dim lastDate As Date
firstDate = wsMeisai.Cells(13, 3)
lastDate = wsMeisai.Cells(15, 3)
If wsData.Cells(dataKiten.Row + i, 1) >= firstDate And wsData.Cells(dataKiten.Row + i, 1) <= lastDate Then '---------組合員名で検索---------
If wsData.Cells(dataKiten.Row + i, dataKiten.Column + 4) = kumiaiin Then
'ヒットしたものを転記
meisaiKiten.Offset(meisaiRow, 0).Value = Month(dataKiten.Offset(0 + i, 0).Value)
meisaiKiten.Offset(meisaiRow, 1).Value = Day(dataKiten.Offset(0 + i, 0).Value)
meisaiKiten.Offset(meisaiRow, 2).Value = dataKiten.Offset(0 + i, 1).Value
meisaiKiten.Offset(meisaiRow, 3).Value = dataKiten.Offset(0 + i, 2).Value
meisaiKiten.Offset(meisaiRow, 4).Value = dataKiten.Offset(0 + i, 3).Value
meisaiKiten.Offset(meisaiRow, 5).Value = dataKiten.Offset(0 + i, 5).Value
meisaiRow = meisaiRow + 1
End If
End If
Next i
End Sub すみません。
ちょっと長いんですが、よろしくお願いします!
なんか2chに貼るとインデントが消えました... >>53
セルに入れてわざわざイベントでやるというのが意味不明
VBAでやるなら普通に変数に入れればいいだけだろ >>63
・無駄な改行が多すぎる
・この長さならfunction分けたほうが良いかも知れない。まぁvbaならどっちでもいいけどな
https://i.imgur.com/KicuV2d.png
>>64
それが出来ればそれでokだけど、
スキャンした文字列をvbaで受ける方法が良く分からない >>63
一応だけど、コードはこのままだと動かないぞ
こういう感じで書くと見やすくなるってだけ >>65
> スキャンした文字列をvbaで受ける方法が良く分からない
⇒ >>42 >>65
ありがとうございます!
なんか見やすいです。
ちょっと自分のをいじくってみます! >>68
回答もできないのに
> 入力中の文字を触るのはIMEやらオートコンプリートやらと競合して、あまり良くない
とか言ってたのかよw 組み込みのソート機能ってアクティブにしないとエラーになるのか…
知らんかった >>66
だよな。
プロシージャ内で宣言したものを、
プロシージャ外で使う方法があるのかと思って、ビックリしたわ。 ということは、dimしてる行を全部外に出せば良いのですかね?
今いじくっているんですが、俺のレベルでいじくると、動かなくなりそうでコワイ... >>70
そんなに面白いの?
>>73
まぁメインはできるだけシンプルにして、各ルーチンを外に出せば、
この先処理が増えてもメンテが楽って事
今から書き直すのは大変だからやらないほうが良い。そこに意味はあまり無い >>73
いや、全部じゃなく、複数のプロシージャで使うものだけね。
あと、「脱初心者」ってことなら、1セルずつ処理するのではなく、
配列に入れてからの方がいい。
あとは、ループで探すんじゃなくて、
アドバンスドフィルタで一気に取り出して、後から書式を加工するとか。 ↑理由を書いてなかった。
1セルずつだと、件数が多くなってきた時に遅いから。 >>74
> そんなに面白いの?
知ったかをバカにしてるだけ
あと今時グローバル変数を勧めるなよ… >>74
わかりました。別のを作るときの課題にします!
>>75
1、あと、「脱初心者」ってことなら、1セルずつ処理するのではなく、
配列に入れてからの方がいい。
2、あとは、ループで探すんじゃなくて、
アドバンスドフィルタで一気に取り出して、後から書式を加工するとか。
この2点、今の俺には知識がなく、どんな処理になるのかイメージがわかないので、ちょっと勉強します!
お二方、アドバイスありがとうございました!
プログラミング、スゲーおもろいです。 これからプログラムを勉強する人への最大のアドバイスはVBAなんか辞めとけ >>78
1は>>76にもあるが処理速度の問題
状況によってはとてつもなく遅くなる >>65
一般的に多いキーボ−ドインターフェースの場合、スキャンしたものを取り込むのは難しいぞ。
多分、ここにいる人達じゃ無理だと思う。
キーボ−ドフックのコードが書けるかどうかだね。
シリアルの場合は簡単だけど。
セル内の文字列に1Dが含まれている可能性が高いからスキャンした文字を受ける必要は無いと思う。
それに面倒なキ−ボードフックのコードを書く前にセル内の文字列に含まれているかを確認する方が先だ。 >>83
普通の知識だよ
グローバルフックって言う方が通りが良い気はするけど >>84
>>81によると
> 多分、ここにいる人達じゃ無理だと思う。
らしいよww
まさかと思うけど揶揄してることはわかってるよね? >>87
どうでもいいかな
回答もできない無能に自覚してほしいだけで キーボードをフックしていいのは昭和時代まで
Windowsではイベントハンドラを作るんだよ >>58
このコードはシートに書いてるのかモジュールに書いてるのかどっち? なぜ突然キーボードフックが出てくるんだ…
まさかバーコードスキャナーが出力ををVKほにゃららで送ってくるのか?
そんな変態デバイスあんの? > 回答もできない無能に自覚してほしいだけで
昭和脳の渾身の回答w
・グローバル変数
・グローバルフック
マジで邪魔でしかないな >>92
煽るならもうちょっと真面目にやってくれ、他人のレスの寄せ集めじゃないか
全然ダメージないぞ、画面の向こうの相手を殺す気でやれ >マジで邪魔でしかないな
お前が言うな。
qzOxQgj0で検索したら、役に立つ情報1つも書いてないじゃないか。
そういうのを邪魔というんじゃないか? スキャンした文字列をVBAで受けるのが分からないと書いてたから、それは難しいぞと返しただけなんだが。
難しいのさえ知らなかった人達が多いんだからな。
そりゃ、ここじゃ無理だろ。
だからまず問題のスキャナから入力されたセルの値に1Dが入ってるかをまず確認してほしいんだがね。 >>91
バーコードスキャナは全然違うものを送って来るよな。
キーボードの仕組みを知っている人は少ない。
VBA関係なく世間一般にプログラマーと呼ばれる人達においても。
メイクコード、ブレイクコードとかコマンドとかね。 >>93
> 全然ダメージないぞ、画面の向こうの相手を殺す気でやれ
自覚がないとか最悪だな
まあ自覚あったら回線切って二度と出てこれないわな
>>94
> qzOxQgj0で検索したら、役に立つ情報1つも書いてないじゃないか。
害悪な情報ドヤるよりマシだろw
まさかグローバル変数を勧めるのが役立つ情報とか言わないよな? >>97
お前は自分が誰に向かって話してるのかも分からんのか?
滑稽だなあ。 >ID:/qzOxQgj0
なんでそんなに必死なの? ケチつけ連投するしか能がない真正バカ小原のことはほっときなさい >>103
入門本とか見てるやつに>>65みたいなコード示したらグローバル変数勧めてるようなもんだろ
事実>>73はそうしろと言われてると思ってるし >>104
ExcelVBAはworkbookを中心にスクリプトを組むので、
実はグローバル変数のデメリットがあまりない
開発が1人なら尚更
1000行ぐらいのコードなら、さっさとグロ−バルでもなんでも使ってスクリプトを組んだ方が良い このスレに、あきらかにプログラミング経験のかなり乏しいやつが紛れ込んでるな
キーボード操作に熟達してれば、普通はマイナスと長音を間違えたり混在させたりしない >>108
他人のレスが無いと何も反論できなくて草 >>106に指摘されてるのにこれ以上何を言うことがあるんだよ…
質問スレとか関係ないだろ
「グロ−バル」なんてどうやって入力してるんだよww >>110
誰の事だよって俺の事か
>>81も変なタイプミスしてるなーと思ってたけど、多分今、googleIMEの変換がおかしくなっている
あまり気にするな、俺も気にしない なんだ、長音とマイナスってそういう意味か。
くだらねえ。
俺はスマホで手書き入力使ってるんだよ。
VBAと何の関係が有るんだ?
馬鹿馬鹿しい。 そういうところに無頓着なのは>>106の言う通りプログラムの経験なさすぎ
そんなレベルで
> 暇だし上げれば見てやるぞ
とか頭おかしい
で、結論が
> ExcelVBAはworkbookを中心にスクリプトを組むので、
> 実はグローバル変数のデメリットがあまりない
とかww
マジでちょっとは自覚した方がいいぞ 自分で考える力がないから〜♪
他の人が指摘するまで〜♪
突っ込む事ができない〜♪♪ >>104
どこをどう見たら>>65がグローバル変数を勧めることになるんだ?
>>73が初心者で理解出来て無いだけじゃねーか。
>>65を見てグローバル変数を勧めてると思うのはよっぽどの初心者だぞ。
引数って知らないか? >>113
だから、お前は誰と勘違いしてるんだ?
それに、無頓着とプログラミング全く関係ないがwww
自分のレベルの低さを誤魔化そうとするな。
発言からレベルの低さは滲み出てるから誤魔化そうとしても無駄。 あと、言っとくがキーボード操作とプログラミングの関係も分かってない。
ギーボード操作が上手くないプログラマーなんていくらでもいるぞ。 >>114
ここでグローバル変数の弊害を説明しろと?
マジで言ってるならちょっとググってこいよ…
>>116
だから入門書とか見てる奴に引数もちゃんと書いてないコード示すなよって話な
VBAスレだと引数知らない奴がいても不思議じゃないし
>>117
はいはい、キーボードフック書ける君は凄いよ
これで満足かなw >>118
誰もキーボード操作の話なんてしてないよ
作った文章なりコードに無頓着かどうかの話
そういう違いもわからない時点で…w >>116で「引数」という単語が出てからようやく>>119で「引数」使ってて草
幾ら何でも自分に自信なさすぎだろう >>120
元々の>>106はキーボード操作の話じゃね―か。
そしてお前は>>106の言う通りと書いてる。
お子様かよ。 >>122
というか、俺に言われて調べ始めたに一票www >>122
あのさあ、グローバル変数ガーって指摘してたら引数で渡してない事を言ってることぐらいはわかるだろ…
そんなところまでいちいち指摘するしかない所まで追い詰められてるのか?w >>123
> そしてお前は>>106の言う通りと書いてる。
ああすまん
> 誰もキーボード操作の話なんてしてないよ
これは間違いだな
ただ「>>106の言う通り」は「あきらかにプログラミング経験のかなり乏しいやつ」のことな >>127
やっぱり人の使った文章しか使えなくて草 >>128
で?
人の使った文章かどうかに関わらずグローバル変数を勧めるのが害悪なことには変わりないだろ
まあもう引っ込みつかなくなって話そらそうと必死なのはわかるけどさww >>129
話題を広げられない、人の引用しか出来ない
これでは君が発言する必要が無いね
個人的には生きてる価値もないと思う >>130
そもそも>>125が嘘だろ。
>>116で初めて知ったのにwww >>127
>>117に書いた通り。
無頓着とプログラミングも全く関係ないわけだが。
反論するなら>>117についての反論も言わないと全く意味がないわけだが。 VBAはエクセル専用用途だから意味があるんじゃないの?
エクセル以外なら他言語推奨 WordとかAccessとかPowerPointとか他のMicrosoft製品にもある(実際Wordで使ってる) >>132
引数わかってないのにグローバル変数云々が言えるとでも思ってるのかよ…
どういう理論なんだよw
>>133
はいはい、そうだね
別にそこは議論の主眼じゃないから君の言う通りでいいよ >>131
> 話題を広げられない、人の引用しか出来ない
> これでは君が発言する必要が無いね
> 個人的には生きてる価値もないと思う
ブーメランすぎるww >>135
Outlookにもあるよ、使ってるし
Accessはそれ自体をあまり使わないからVBAも使ったことないな 業務にも依るんだろうけど、Excelについで使うのはAccessだな
パワポでも使えるのは知らんかった ca01をNGに突っ込んだら
当面このガイジは見えなくなるよ >>138-139
挙げるとキリが無いから省いたが、ほとんどのMicrosoft Office製品に入ってると思っていい
(PublisherとかProjectとかVisioとかそういうの)
ちなみにWordで組んだのは文脈から漢数字だけを判別して半角英数字に置換したり段落書式を設定したりアウトラインとかインデントを付けたりとかそういうの
話が脱線するのでこの辺で >>140
一人でNGしとけばいいのにいちいち報告とかw 俺、初心者だけど、C4oDmko00が劣勢なのはすごい分かる
イチャモン付けてケンカ吹っかけたけど、
相手が強すぎて、返り討ちにあって逃げてるチンピラみたい
かわいそう。。。 >>143
> 俺、初心者だけど、C4oDmko00が劣勢なのはすごい分かる
どこを見てどういう理由でそう思ったのかな?
具体的に書いてみ >>136
???
またおかしなこと言い出したぞwww
引数取らないプロシージャ並べて呼び出す時にグローバル変数で連携しようとするのを批判してるんだろ。
引数知らなくても批判出来るし、知ってたら一番先に引数について言及する筈なんだけどwww >>143
ID変えてご苦労様。
このスレでよく見かけるからバレバレ。
ついでに口調もそっくりwww グローバル変数を批判する奴ってセル値でのステータス値管理も批判するのかな
危険性はあまり変わらないんだけど >>145
以下をNGにしとけばOK。
ワッチョイ ca01-BSeC
ワッチョイ fe68-bYGp
ワッチョイ a991-afcP >>145
>>65でID:ar/F9wgf0がプロシージャを分けると見やすいと例示した動かないコード
それを見たID:C4oDmko00がなぜかグローバル変数の使用を推奨していると勘違い
グローバル変数以外にも引数で渡すこともできるし、もっと他の方法もあるのになぜか「お前グローバル変数推奨したやろ」の一本槍で糾弾
ちなみに>>65をぱっと見ただけで俺が思いついたのは:
・モジュールレベル定数(Private Const)を使う。
・モジュールレベル変数(Private)を使う。
・必要な変数のみを引数としてプロシージャに渡す。
・自作クラスを作る。
スキルが低い俺でもこんだけ色々な選択肢があるなーと思うわけだが、どれを選択するかは書く人の自由で、
「これをどう動かすかは自分で考えろ」というだけのことだろう。
余談だが、俺はグローバル変数=パブリック変数(Publicステートメントで宣言する変数)だと思ってた。 >>146
引数知らない奴がどう批判するんだろう…
どんどん意味不明になってるぞw
>>147
必死すぎ、顔真っ赤だろ
ちょっと落ち着けば自分がどんだけアホなこと言ってるかわかるだろうけど… 正直VBAでするお仕事の規模でグローバル変数とか気にしてもしょうがないぞ >>149
ステータス管理の内容によるだろ
その状態を次回まで引継ぐとかならセルでやるしそうでないなら変数でいいと思う
セルは通常のプログラムで言うストレージに近い 俺がここ(>>65)で教えてもらったのは、色々な書き方があるって事で、絶対こう書けってことは言われてないぜ。
俺が脱初級者になる為の一つのヒントをもらっただけで、俺の技量が上がれば、何が最適か自分で判断するよ。
凄腕の人が、ヒントやキーワードを無料で教えてくれてるだけで、ホント感謝だわ。 >>151
スコープの話にしようとしてる?
まあどんな方法を取るかはプログラマー次第だけど、今時グローバル変数/モジュール変数はなぁっていうだけの話
あと自作クラスを作るのはいいけどそのインスタンスはどうやって持つつもり? >>156
流れと関係ないけど、「グローバル変数を使うのはやめてクラス化しましょう」
みたいな意味不明な主張はわりと見る。 >>149
・そのステータスがUIの一部でもある
・プログラムが終了しても値をセーブしておきたい
場合なら許容できるかな あとからメンテさせられた時大変なのでVBAかどうかではなく構成によって使い方を考慮してもらえるとありがたいです >>157
あれなんなんだろうね
なんか異様なクラス信仰でもあるんだろうかw >>152
何故引数を知らないと批判出来ないんだ?
バカ過ぎだろ。
お前のような初心者はプロシージャを分けるという発想が無い。
引数を知らないからプロシージャを分けたら連携するためにはグローバル変数を使うしか無いと思ってたんだろ。
バレバレだ。 >>156
その批判もピント外れ。
今時とか関係ないからwww >>156
「今時なあ」は君の意見じゃないのか。
何か、最初の勘違いから変に君とおかしな奴のIDを間違えるようになっちまった。 どっちにしても引数知らなくてもグローバル変数批判は出来るし、実際批判したじゃないか。 マジで言ってるのか…
>>73
> ということは、dimしてる行を全部外に出せば良いのですかね?
これはグローバル変数を使うことを示唆してる
それに対して>>74が何も言ってないから指摘したの、わかる?
ちなみにいま読み返したら
>>75
> いや、全部じゃなく、複数のプロシージャで使うものだけね。
と、もっと直接的に言ってるアホがいたわ
しかもそいつは
>>103
> 誰もグローバル変数なんか勧めてないが。
とか言ってるしww >>150
>>151
サンガツ
よく状況が分かったよ
他人を馬鹿にしたいだけ人っているよね
初心者から抜け出せないタイプだと思うわ > 他人を馬鹿にしたいだけ人っているよね
> 初心者から抜け出せないタイプだと思うわ
ブーメラン乙w ちなみにグローバル変数絶対反対っていう風潮って古いよね
ローカル変数を多用した状態管理って保守運用のフェーズでは多重階層化の弊害を招きかねないから変数スコープの制限はケースバイケースでしょ >>169
どこがブーメランなんだ?
俺は他人を馬鹿にしたい "だけ" の人間ではないし、初心者でもないんだが
馬鹿を馬鹿にするのは楽しいけどな >>167
だからそれは引数を知らなくても出来るし、実際知らなかったろ。
引数を知っていた筈という話には全く繋がっていない。 「自称」非初心者がなぜか
> ローカル変数を多用した状態管理
とか頓珍漢な事を言い出したぞw
なぜわざわざ墓穴を掘りに来るんだ… >>172
まだ言ってるのかよ…
お前がどう思おうと客観的な根拠もないことを何度繰り返しても真実にはならんよ
真実は
・>>65を見た>>73がグローバル変数で情報の受け渡しをすると思った
だけな >>65で教えてもらっただけで、そんなこと全く思ってないけど??
勝手に何言ってんだ?? >>175
お前が誰かは知らんけど
>>73は
> ということは、dimしてる行を全部外に出せば良いのですかね?
って書いてるからな >>104
全部出していいかと聞かれたから、全部は出すなと言っただけだろうが。
それのどこが推奨してることになるんだ?
もし推奨するなら、全部出せって言うわ。 それは俺なんだわ
ただ
・>>65を見た>>73がグローバル変数で情報の受け渡しをすると思った
これは全然違う
おまえ、ここで親切に教えてくれてる人に不快な思いをさせるなよ 飲みに行って帰って来たらまだやってて笑ったw
>>177
一日中不毛な言い争いしてて受けるw
生きてる意味ねーw >>178-179
なら
> ということは、dimしてる行を全部外に出せば良いのですかね?
の意味を説明してみ >>181
> 生きてる意味ねーw
もうそう言う事しか言えないんだな… >>184
ああ、説明できないなら無理に説明しなくてもいいよ >>178
> いや、全部じゃなく、複数のプロシージャで使うものだけね。
なんのためにこんなことが必要なんだろうねw >>185
生きてる意味ないのは本当だろう。
リアル社会でどんだけクズなのか知らんが、
こんなネット掲示板ですら何の役にも立たず、荒らすだけの存在なんて。 >>187
全然反論になっていない。
グローバル変数を勘違いしようがしまいが、お前が引数を知らないで、プロシージャを分けるとグローバル変数を使用するしか無くなるという頓珍漢な批判したことは変わらない。 >>188
ああ、すまん
そこまで困ってるとは思わなかったよww >>190
俺がどう批判したかなんて関係ないよ
>>75が
> 複数のプロシージャで使うものだけね。
って言った事実は消えないってだけ
可能ならその意図を説明して欲しいが、まあ無理でしょ?w >>191
なんでお前に説明せなあかんねんって事なんだが、
なにひとりで納得してんの??
気持ちわりー >>193
ローカルとグローバルを使い分けるという意味だが。
ローカル教のお前は理解できんだろうが。 >>193
>>75は全くその通りだが。
何がおかしいんだ? >>195
ああ、そういう意味で>>193は批判してたのか。
うん、使い分けるという意味だよなあ。
逆に>>193が何を言ってるのか分からんかったよ。 >>195
は?
> 複数のプロシージャで使うものだけね。
なのにローカル?
使い分けるってことはグローバルも使うってことだよね?
まあ>>194みたいな結論になる前に黙ったほうがいいと思うよw >>198
えっ、お前ってグローバルは少しも使っちゃいけないって意見だったの?
一体、どこの初心者だよw >>198
何でお前はそんなに俺がグローバルを推奨してるってことにしたいんだ?
もう一度言うが、外に出して良いかと聞かれたから、
外に出して使うケースを書いただけだぞ。 結局これは何だったんだ?
↓
・>>65を見た>>73がグローバル変数で情報の受け渡しをすると思った
こいつは俺の思考を勝手に解釈して、間違って恥かいてたの?? ID:C4oDmko00 はもう人に迷惑かけるんじゃねーぞ
今流行りの犯罪者になっちゃうぞ >>199
必要なら使う
必要ないなら使わない
せっかく>>65みたいに機能分割したんならグローバル変数なんて必要ないでしょ
って言うだけの話
>>200-201
もうお前らいいからw >>203
>もうお前らいいからw
人に聞いておいて、何だその言い草は。
お前マジで人間終わってるよ。生きてて良いレベルじゃない。 >>203
はい?
何言ってんだ?
機能分割とグローバル変数は関係ないぞ。
アプリ全体で使いたければグローバル変数にするだろ。
プロシージャを何個もまたぐのに、それだけの為に全部引数で渡すのか?
プロシージャに分けるのは汎用化、独立性の為で、その為にグローバル変数じゃなく引数にするということはある。
しかし、アプリ全体を通して使いたいものは、グローバルで問題無いぞ。 >>204
> 外に出して使うケースを書いただけだぞ。
だからそれはなんのためにやるんだ?
って聞いてるのにローカルがどうのこう言われてもねぇ…
重ねて言うけど外に出さないケースなんて聞いてないから >>206
もういいってお前が言ったんだぞ。
いい加減にしろ。 俺はもう降りる。
いいか?
間違っても、犯罪起こして、ネットでバカにされたせい、
全部こいつらが悪いとか言うんじゃないぞ。 >>205
例えばログ用のインスタンスとかならあるだろうな
でも>>65みたいなケースはちがうでしょ?
具体的に言えば例えばkumiaiinっていう変数は「転記」と「検索」でしか使ってないのにグローバル変数にするの?
って話ね >>207-208
相手して欲しいのかして欲しくないのかどっちだよw
むしろ危ないのはイライラしてるお前じゃね? ワークブックとかシートとかのExcelオブジェクトでPublic変数を定義する場合と標準モジュールでPublic変数を定義する場合とでは挙動が違うっていう点も大事だと思うんだよな 飲み直したらまだやっててワロタw
その人生楽しいの?w 明日も仕事だしさっさと寝るわw
何の意味もない煽りあい頑張って~
バイバ〜イ 貴重な土日の休みを5chのレスバで消耗するとか悲しすぎるだろ vbaでpdfの入力フォームとかいじる必要がでてきたけどぜんぜんわかんねえ >>217
AdobeのPDFを編集出来るバージョンを持ってれば、参照設定でいじれるし、
ググれば結構作例が出てくるから難しくはない。
無ければ難しいだろうね。 Acrobatなしのpdf編集なんて楽勝やろ、と思ったらゲキムズで諦めた
今でも難しいんかね 中身がテキストじゃなくバイナリって時点で、Acrobatなしは諦めたけど、
XFDFだっけ?
ああいうのでも良ければ何とかなるかもしれない。 >>219
まだ昔の方が比較的簡単だった
今はもう完全に不可能と思った方がいい >>221
構造は基本変わってないでしょ?
機能がたくさん付加されてるから完全対応とかはめちゃ大変だけど ゼロからPDF形式のファイルを生成するだけなら簡単
下位互換はあるから、昔の簡単なフォーマットで作ればいいだけだから
最新バージョンの編集は、機能が増えすぎてちょっとやそっとじゃ対応できない
PDFの仕様書はネットに転がってるから、あとはやる気次第かなあ
https://itchyny.haten%61blog.com/entry/2015/09/16/100000 だからそんなのをVBAでやるなって
エクセルとかオフィス専用なんだろ? いいなぁ僕もマウントできるくらい、まくろのお勉強しないとなぁ >>217
単にWordで入力欄のあるPDFを作るのをVBAで補助するだけじゃあ駄目なの? 初歩的な質問で申し訳ないんだけど、ボタンをクリックしたらテキストボックスの値を参照して、参照した値を表示するプログラムがうまくいかないんだけどどう直したらいいのか教えて欲しい。エラーはこんな感じ
https://i.imgur.com/AG4P5Zh.jpg
https://i.imgur.com/VSa48Wl.jpg 間違えたユーザーフォームじゃないのか
たしかSheet1のモジュールに書かないと名前を認識しないはず >>232
標準モジュールに書いてる、というかボタンをつくってVBを編集すると標準モジュールにコードが書かれるんだけどSheet1にボタンのコードを書くってどうやるの? >>229
まあ作りたいものの要件も定義できないんだろうね
各種バージョンによって仕様のあるPDFをVBAで編集するなんて考えるだけ無駄なのに >>236
このシートにあるボタンって標準モジュールのボタン2で書いたコードと同じもの? >>237
出来ればどこを間違えてるか教えて欲しい
>>238
同じもの Private Sub TextBox1_Change() の1行を
Sub ボタン2_Click()
に変えれば動くはず。 >>240
同じものであれば、>>236と同じエラーが出るってこと
ならば、txt.TextだけどSheets(1).txt.Textでないの ごめん確認したけどActiveXじゃないフォームコントロールのボタンだと
シートモジュールに書いても無理だったわ。
標準モジュールに以下のとおりやると動く
Sub ボタン1_Click()
MsgBox Worksheets(1).TextBoxes("txt").Text
End Sub
ワークシート1枚なのが前提だから調整してね。 オブジェクト名だけでの直接指定ってシートモジュールでないと通じないし
でもフォームコントロールのイベントは標準モジュールに書かないと動かないっていう ごめんフォームコントロールじゃなくてActiveXでボタンをつくったらちゃんと動いた皆が言ってたのはこういう事だったのか
https://i.imgur.com/aBVNoI2.jpg こっちだとこれで上手くいくんだけどね
https://i.imgur.com/BOjQoKC.jpg
環境はoffice365
テキストボックスは挿入タブから作成
ボタンは開発タブのフォームコントロールから追加 そうそうフォームコントロールよりActiveXのほうが複雑だけど融通が利くよ >>244
まあ、「フォームコントロール」は使うなと教わった気がする
ActiveXですべてコントロール書くな
混ぜて使うと今回みたいにぐちゃぐちゃになるよな
>>245
>ボタンのプロパティが表示されない
ああ、フォームコントロールは表示しないのか、使わんほうがいいと思う ID:ZjOdLx630 ID:yoXwfxDh0色々教えてくれてありがとう 簡単なフォーム作って動作確認したらテキストボックスの内容だけが指定セルに入力されません。
どこを修正できるかおしえてくれませんか?
Private Sub ComboBox1_Change()
If ComboBox1 = "1−1" Then
Range("A1").Select
End If
If ComboBox1 = "1−2" Then
Range("B1").Select
End If
End Sub
Private Sub CommandButton1_Click()
If ComboBox1 = "1−1" Then
Range("A1").Value = TextBox1.Text
End If
If ComboBox1 = "1−2" Then
Range("B1").Value = TextBox1.Text
End If
End Sub 狙いがさっぱり分からん。
何でコンボボックス選択でセルを選択してんの? 四半期ごとのデータを入力する際に入力するセルをコンボボックスで指定したいからですね いやいや、セルの選択は必要無いと言ってんの。
つまりComboBox_Changeのプロシージャは全部必要無いと思うと言ってる。 選択してなくても入力出来るし、普通はセルを選択するコードって書かないものなんだ。
敢えて、ユーザーにここだよと知らせるために選択することなんかは有るけどね。 >>258
確かにChengeプロシージャはなくていいと気づきました。クリックイベントで思いっきり指定してますね。ありがとうございます。
そこを丸々消してもテキストボックスの内容が指定したセルに入力されないところがどうしても分かりません、、、 ComboBox1の後ろを省略すると、Valueなんだっけ?
Valueじゃないものがデフォルトなら、入らないと思うけど。 >>261
ようやく意味がわかりましたわ。>>256はそのことを言ってたんですね。
そこを修正してようやく入力できました。
ありがとうございました。 >>264
そうなのですがたexcelプログラミングに特化した方達がいるスレが他に見当たらなくて・・
何卒お願い致します>< >>263
他人の力でレポート提出するのはよくないよ 最初から解く気がないからここで答え聞いても多分わからないままじゃない? プログラミングに興味があってしてるわけじゃないので分からないままで大丈夫です
教科書を見ても該当の問題がないので八方塞がりになってます
ですのでお願いします><; つーかここエクセルのスレというかエクセルのVBAのスレだしな
表計算そのものはスレ違いかと >>268
自力で出来ないなら諦めるしかなかろう
能力以上に背伸びしようとすると他人様に迷惑がかかるから分を弁えて生きていけよ 難癖つけたい昭和の爺しかいないのか(´ . .̫ . `)
他をあたります 時間を使ってもらうことだから解答してもらえないのは不満はないけど
嫌味だけ言ってくるのはね >>268 みたいなこと書いたら火に油。
・表計算の関数式はプログラムではない。Excelのプログラム言語はVBAで、関数式ではない。
・質問内容がExcelとネット環境が使える状態ならヘルプやネット検索で得られる情報で手元検証しつつで解ける初歩の初歩レベル。やるべきはここで丸投げや教科書を調べることではなく、ヘルプやネットの調べ方や、キーワード抽出能力、試し実験する能力
これらの能力はExcelに限らず仕事全般に必要 その一文なくても答えてくれてなかったと思うけどね
上の質問内容もレポート全ての問題ではなく調べても考えてもい解けなかった7問です
その上で質問したので丸投げとか言われても・・・。 >>278
スレの違いすらわからない丸投げの馬鹿
マルチポスト
死ねや >>278
その努力の跡を見せるのと見せないのでは反応が全然違うのよ
次があるか分からないけど参考までに >>278
どうやって調べたか教えて欲しい
複合参照一つにしても、
「セル番地を複合参照で列を固定」質問文そのまま検索するだけで答えが出てくる
これ以下の行動が想像出来ない
納得できる理由を持ってきたら全問解いてやるぞ。 >>281
それはあなたがexcelの基礎を熟知してるから調べたらすぐ納得出来る答えが見つかるだけです
excelの知識0未満の自分が検索しても相対参照複合参照セル参照、固定etcどんどん理解不能な専門用語が出てくるだけで
基礎知識0の人間がいくら調べたとこで応用の問題が解けるわけない
努力とか苦労とか抜きで単純に教えたくないだけでしょ
0から腰を据えて勉強する時間もないので色んなとこをあたってみます >>282
昔自分もそうだったから気持ちわかるよ
ただわからないままでいいから答えだけ教えろって態度が良くなかったね
Excel総合相談所の方では途中まで答えてくれようとしていた人いたのに勿体無い というか聞くならこんな場末の掲示板じゃなくて同じ講義受けてる友達に聞けよ どこの質スレでも、どこまでわかっててどこからわからないかとか説明しないと丸投げは答えを貰いにくい
それはともかくとして内容的にここではスレチなので該当スレに移動して聞くのがよい
そういうの無視して自己中心的な態度を取ると相応の反応しか来ないことが多い >>263
@ SUM($F5:$F9) A SUM(F$5:F$9) B SUM($F$5:$F$9)
@ B5 * SUM(C5:E5) A F5 / $F$10 * 100
B IF(G5>0.2,"〇", "")
C Average(C5:C9) D MAX(C5:E9)
一番目は問題文が意味不明すぎて何ともいえない。答えを記入て?コピー入力時の値なの入力数式なの?
二番目、レポート第三回「算術演算子のミス」ってのが*/じゃなく×÷を使えって意味なら変えてね >>282
熟知するまでにどれほどの努力が有ったんだろうね。
全く教えがいが無い。
どうせ身に着けようとしないから3日もすれば同じ質問してくる。 バカは自分のことしか考えない。
上級者がそうなる迄にどんな努力したのかとか、全く考えない。 >>282
何のレポートか知らないけどこういう試験みたいなレポート課されるってことはExcelのこと教えてくれる講義かなんかでしょ?
それ取っといて基礎知識0なわけないよね
サボってたなら自業自得だ諦めろ ここで教えてもらったり聞いたりするのも勉強だろ?
丸投げで解決するなら効率良いし 結果だけ知っても応用無理
自力でやった過程も大切
自力で訊いたとか言いそう >>292
聞き方が悪すぎてそれすら出来ていないw
礼儀正しく聞くか努力した後を見せるか、それだけで全部終わるのにな〜んもせずに時間の浪費
社会に出てこなくていいかな >>292
解決できるなら効率いいけど結局解決できてないし煽られて顔真っ赤になって効率マイナスになってるぞ 顔が赤い?
ここはインターネットだから見えないのになぜわかるw >>296
vbaスレだよ
下手に出るor努力家なら普通に教えるし、
上から目線で面白いキャラならそれはそれで笑いの対価に答えてあげる楽しいスレ
俺はどう調べたかを教えてくれれば答えるつもりだったけど、何故かそれすら無かった しょうがねえな答えてやるけどどこの学校の何の課題かだけ教えろ
課題の背景知らないとどう回答していいのかもわからんわ >>287さんのような立派な人が教えてくれる
何も知らない人は難癖付けて優越感に浸るだけ なるほどなあ
立派にうんちへの道を歩んでいるようで何よりだよ 教える奴ってのは教わった奴がそれで成長するのが嬉しくて教える。
教わっても課題提出した後はゴミにするようなバカに教えるわけが無いだろ。 >>298
最初は下手に出てたけど嫌味を言ってくるから同じ対応しただけっすよ^
何度も言ってるけど自分にexcelの基礎知識が一切ないから「こうやって解こうとしたけど此処が分からなかった」とか
理屈だって説明ができないって言ってるじゃん。日本語理解してます?
最初から教える気がないくせに気持ちが悪い。
(解いて貰うことが当たり前とは全く思ってないけど、こういう難癖爺は本当に不愉快です) 基礎知識が無ければ解かなくて良いだろw
お前のやり方でOKなら世の中にExcel使える奴なんて1人も出て来ないんだよ。
皆、努力してる。
それが嫌なら解くな。 最後まで下手に出てりゃ教えて貰えたかも知れないのに
本当バカだな 最初から一貫して、考える気がないから答えだけ教えろと言ってるから反発を買ってると何故わからない
そういうのは下手に出てると言わない
それ以前にスレチ、マルチポストなんかどこでも嫌われる 何がどうスレチなのか本人理解していない
本当にExcelを起動させたことだけはあるってレベルなんだろうな
それにしても相対参照なんてはじめてのExcelみたいなテキストの初めのほうに出てくるのに理解不能な専門用語って… >>304
だから「何をして」分からなかったの?って聞いてるんだけど
君の行動を知りたいんだよ
まさか何を検索したかも覚えてないの? まぁでも複合参照って単語は俺も覚えてないわ。使わんやろ >>313
出ている問題文を区切って単語単位でいくつか検索しましたよ。
・・・ですが基礎知識が皆無なので分からない単語が更に増えていくばかりで意味がなかった。
答えにたどり着いていたとしてもそれが答えなのかどうかもわからない。
理由は単純明快で”どこどこ”が分からない等ではなく”excelの全てが”分からないからです。>>311さんの言う通りexcel起動したこともないので
まあ此処では教えてもらえないでしょうね excel起動したこともないwwwwwwwwwwwww
笑った 笑ったから教えてあげる
>>287は全部間違いなく合っている
終わり そういやあっちのスレに、OSがWindows10で、バージョンはExcelって書いてるな。
バージョンがExcelって何だよ?
一体どんな環境で勉強してるんだ?
紙だけでやろうとしたら、そりゃわからんわ。 >>318
多分Excelソフト自体持ってないんじゃない?
なんか色々合点がいった
そりゃあわかんないよね…頑張れ高校生! Excel起動したこともないって、完全にやる気ないんじゃん
実際にやっても見ずに文字だけ見たってわかるわけがない、そんなの知識あるなしは関係ない
なんでそれをそんなにドヤって語れるんだ
ほんとに身勝手だな… >< ←これ使い出したあたりからネタにしか見えなくなった さすがにエクセル起動したことない奴にマクロを説明するのはしんどすぎるわ
日本語話せない外人に川柳の深さはさすがに説明できないです >>314
複合参照はよく使うでしょ
これやっとかないとずれるじゃん ちゃんとネタに付き合ってるところがお前らのいいところだわ
他スレじゃここまで付き合うやついないわ >>325
複合参照自体はそれなりに使うけどその単語は知らんかったわ
てか意味の取りづらい単語だな 商業高校などでExcelは必須科目のはずだが、「起動したこともない」生徒を教えるのはしんどいなあ 問題に親切にも、教科書P99とか、レポート第3回参照とか書いてあるけどな
99ページ超えるような教科書と、過去3回以上のレポート提出があって
エクセルの知識ゼロとか言うあたり、どうしようもないな 人に教える能力がない奴に限って大声で叫ぶ
分からないなら黙ってりゃ良いのに出しゃばるなってw
>>287さんのような人は素晴らしい まだやってんのかよ
こんなとこ覗いてる暇があったらExcel勉強しろよバカなんだから これだからスレの使い分けをしないやつらは迷惑なんだ… >>327
俺も複合参照って呼び名は知らんかったわ とりあえず問題画像を拡散して学校名とクラス辺りから特定してみようか
3連休のくだらない遊びとして これまで発掘された投稿(日付順)
ttps://mevius.5ch.net/test/read.cgi/bsoft/1556754363/731-
>>263
ttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12210409122
ttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10210410850
ttp://www.excel.studio-kazu.jp/kw/20190711212238.html
ttps://mevius.5ch.net/test/read.cgi/bsoft/1556754363/806,809
>期日までに全て正解した状態で完了しないと出席足りてても単位にならない
>期日は7/24 1,2回しか提出チャンスはない
→通信制あるいは定時制?
ttps://gyazo.com/1c48e5087536c8b403b6f8ef9131b00c
>2019情報処理R4-5 抜けてた。エクセルの学校より
>たかが高校の宿題程度です なんか手当たり次第だな
しかも行く先々で自己中で上からだし、根っからそういう性格なんだな…
こんな事で時間浪費するより先生に聞くなり泣きつくなりした方が早いのに twitterあたりなら誰かがすぐ答えてくれるんじゃないのかな
なんで5chにこだわるのか あの調子じゃどうせこの先の人生ハードモードだから放っておけばいい
親と教師はご苦労なことで 特定を恐れただけじゃね
5chの専門板ならリスクが低いと思ったんだろ もうやめたれ
vbaの質問スレにvbaなんか使わないこと質問してる程度のやつなんだぞ、、、 「列を絶対参照」とか言ってたな
厳密に言うと間違ってたんかね〜 A$1 (相対参照列と絶対参照行)
あぁやっぱりこう呼ぶのか
じゃないと区別つかなくて不便だろう 列を絶対参照はまさにそういう意味で
複合参照と言っているものと意味の範囲が異なる
だから勝手に名前つけて呼んでもセーフ >>349
英語ではmixed referenceだから混合参照の方がまだマシな気がする VBAでクラスのメンバに配列がpublicで宣言できないのです。
これはなぜですか?
privateならできるようです
そういう仕様になった背景に異常に興味があるのですがなぜでしょうか? >>353
不思議だし理由はよくわからん
VariantをReDimして使うしかなさそうだ >>354
いやgetter, setterのPublic Functionを作って使った >>353
しらなかった
https://i.imgur.com/Rzt8c7Q.png
VB.NETではできる様になっているので特にバッティングする要素などはないはず
多分何も考えずに作ったか、スペックの低いPC時代に何かバグがあったか なにがなんでもユーザーにオブジェクトをカプセル化させたかったんだろう
MSはユーザーを誘導しようとして変な仕様を盛り込むのをよくやる >>359
配列だけだからそれはない
別の事情があったか、単にミスだと思う >>358
この謎仕様と、引数付きコンストラクタを定義できない欠陥仕様がVBAのクラスモジュールの使い勝手を異常に悪くしてるよな VBAできたのOffice95だろ?
16bitに毛が生えたようなリソースで配列なんて便利なもん公開したら
アホが無駄遣いしてクレームが殺到するからだろうな >>364
> VBAできたのOffice95だろ?
Excel だけは先行しててExcel 5.0から
Office 95からWordとかAccessにも搭載された
> 16bitに毛が生えたようなリソースで
配列は32KB制限とかあるからリソース関係って言うのはあり得ると思う まぁVB含めてなんでこんな糞仕様やねん
てのは歴史的理由が大半なので深く考えてもしょうがないぞ 比較演算子の全項評価されるのまいった
一貫性があるといえばそうだがものすごく使いづらい
Excel VBAこそ関数型言語使うべきだったとおもう Sub Sample()
Dim rng As Range, i As Integer, RangeArea As String, RowCount As Integer
RangeArea = InputBox("選択したいセル範囲を入力してください", "セル範囲入力")
Range(RangeArea).Select
i = 1
For Each rng In Selection
rng.Value = i
i = i + 1
Next rng
RowCount = Selection.Rows.Count
Selection.Copy
Selection(Selection.Rows.Count, 1).Offset(2).Select
Selection.PasteSpecial xlPasteAll, Transpose:=True
Application.CutCopyMode = False
End Sub
このコードの最初の部分のセル範囲を選択するところをapplication.inputboxに変更したいのですが、やり方がわかりません。どうかご教示ください。 >>368
これで普通に動いたんだが
Sub Sample()
Dim rng As Range, i As Integer, RangeArea As String, RowCount As Integer
RangeArea = Application.InputBox("選択したいセル範囲を入力してください", "セル範囲入力")
Range(RangeArea).Select
i = 1
For Each rng In Selection
rng.Value = i
i = i + 1
Next rng
RowCount = Selection.Rows.Count
Selection.Copy
Selection(Selection.Rows.Count, 1).Offset(2).Select
Selection.PasteSpecial xlPasteAll, Transpose:=True
Application.CutCopyMode = False
End Sub VBAのクラスでPublicな変数とか少しびっくり。
正直意味不明だわ。
普通はプロパティー作るんじゃ無いの? >>373
まんまGetとSetを用意しといて「Public変数じゃない、カプセル化してます」と言う愚かな奴はいるかも知れない。
いや、流石にいないか >>375
えっ?
カプセル化してますなんて言わんがGETとLET用意するよ。まんまでも。
感覚として自然に。
自分はプロパティーはプロパティーと呼ぶしPublic変数とは言わないね。 >>376
プロパティが変数に直接紐付いているとは限らないから一概には言えないけれど
Public 変数が適している場合はPublicとして晒すさ。 >>376
クラスがある変数を持ってたとして、
直接GetとLet用意することは少ないしPublicにするのは更に稀だ
一応念のため断っておく >>378
だから変数じゃないし。
プロパティーだし。
クラスがpublicな変数持ってるという考えが既に変に感じる。
勿論、内部にprivateな変数を持ってるのは当然だけど。
カプセル化等という言葉では無く(実際はその通りだけど)、感覚としてオブジェクトというものを捉えていれば普通の感覚。 >>379
同じだなんて言ってないでしょ?
> クラスがpublicな変数持ってるという考えが既に変に感じる。
なんで??
勝手に触っちゃダメとか変更に弱くなるいうのはわかるが、それ以外の理由を持ってるみたいだね? >>381
カプセル化と結局一緒だけど、オブジェクト志向的に自然な考えからするとpublicな変数というのが変。
オブジェクトに意味のない数値がくっ付いてるイメージだね。
Excelでいうとセルに何故か変数がくっ付いていて、それがセルに関わるValueとかLeftとかそういう"意味付け"も持っていない感じ。 クラスというのはオブジェクトを設計するわけだから意味の無いものをくっ付けるのは設計として違和感がある。
そして、意味が有るものはプロパティーとして設計するから自然にGET、LETを使ってた。 >>373
そもそもvbaでクラスを作る事は本当にない
ブックがpublicみたいに見えるから今更privateとかにしても仕方ない
実際はprivateブックの下位に書いてるからpublicに見えるだけなんだろうけど、まぁ同じ >>383
それも意味分からんわ
意味ないものをくっつけるってなんのこっちゃ? >>385
うまい言葉が見つからんが、ようは「宗教観の違い」ってやつじゃないか?
たぶん>>383の言いたいこととしては、
「プロパティにアクセスしてGetなりLetなりSetなりできるのに、
この上Publicにして外部モジュールからメンバ変数への直接参照を可能にする意味があるのか?(設計おかしくね?)」
みたいな感じじゃないかなと思う。 着エロでおまんこクパァしたら萎えるだろ
そういうこと >>386
むしろGetもLetもできるならPublic変数でよくね? >>388
>GetもLetもできるならPublic変数でよくね?
そういうところが「宗教観の違い」なんだろうと思ったわけで。
>>383がこう思ってるんじゃないかなと思って書いただけだから、実際言いたいことは違うかもしれんし。 VBAが悪いとかVBが悪いとか宗教とか別スレ立ててやれよ
どうでもいいわ(笑) >>391
あんまりよくない
他言語・複数開発の常識を鵜呑みにしてvbaに持ち込むとめんどくさくなるだけだぞ 程々が一番なんだけど、vbaに至ってはその采配がマジで難しい
普通は使い勝手の悪い言語は全自動で廃れるけど、恐らく唯一無二で太古の使い勝手のまま広まってしまった言語
どうしても荒れると思うし、正解もない >>1
スレタイに戻れよ
>ExcelのVBAに関する質問スレです
>コード書き込みや作成依頼もOK Worksheet_SelectionChangeイベントを使って選択されたセルがColumns(20)を超えて選択された場合に選択を19までに戻したいんですけどコードを教えて下さい。 application.enableEvents = false
if selection.column > 20 then
selection.resize(selection.row,19).select
end if
application.enableEvents = true まちがえた
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Selection
If .Columns.Count >= 20 Then
Excel.Application.EnableEvents = False
.Resize(.Rows.Count, 19).Select
Excel.Application.EnableEvents = True
End If
End With
End Sub >>398
早い返信ありがとうございます。
コードありがとうございます。
これって例えば選択したセルが30から60と選択された場合ってエラーですか? いや、
30〜60列目までの範囲が選択されたら
30〜48列目が選択された状態に変える
要望内容を捕らえ違えたかな? もし19列目(T列)移行を選択しないようにするって意味なら以下
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ActCel As Excel.Range
Set ActCel = ActiveCell
With ActCel
If .Column >= 20 Then
Set ActCel = Cells(.Row, 19)
End If
End With
Dim cngRng As Excel.Range
With Target
If .Column > 20 Then
Set cngRng = Range(Cells(.Row, 19), Cells(.Row + .Rows.Count - 1, 19))
ElseIf .Column + .Columns.Count > 20 Then
Set cngRng = Range(Cells(.Row, .Column), Cells(.Row + .Rows.Count - 1, 19))
End If
End With
Excel.Application.ScreenUpdating = False
Excel.Application.EnableEvents = False
If Not cngRng Is Nothing Then
cngRng.Select
ActCel.Activate
End If
Excel.Application.EnableEvents = True
Excel.Application.ScreenUpdating = True
End Sub ’こんな感じじゃなくて?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
Set rng = Intersect(Columns("A:T"), Target) '20まで
If Not rng Is Nothing Then
rng.Select
Else
Cells(1, 1).Select 'エラー時A1を選択
End If
End Sub 行が削除された。行が挿入されたを認識したいんですがなんか方法ありませんか? >>404
別シートから認識したいシートを参照しておき、参照先が変わったら認識とか
めんどくさすぎるか >>404
WithEventsの変数2つ作って行削除行挿入のコントロールを入れておいてclickイベントで弄る どんな状況で使うんだそれwww
勝手に削除するやつがいるのか? Worksheet_Changeイベント内で
if Target.Columns.Count=Columns.Count Then
の中に、コピーされた時を想定してデータを貼り付けた時に特定のセルを消してます。
このイベントは行削除も行挿入もif中に入ってくるので、その2つの場合は除きたいんですけど、無理ですかね? >>409
その条件を別の方法に変えたら?
貼り付けのイベントを拾うとか。 >>404
でけたっぽいが、あらゆる使用状況でテストしたわけではないよ
Dim Sel As Range
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Set Sel = Target
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo GoErr
If Target.Row = Sel.Row Then
Debug.Print "変更"
Else
Debug.Print "挿入"
End If
Exit Sub
GoErr:
Debug.Print "削除"
End Sub 別途配列にも代入しとけば、削除に反応してSQLのDELETE文の発行にも使えるね
そんなことやったような記憶
あんまりお洒落なことすると、ハマる恐れもあるが 「VBA StringBuilder」とかでググって出てくるコードの例(具体的にはhttps://qiita.com/e-katayama/items/8a114357b0df91cfbdbbなど)をベースに、特定の変換をかけた文字列を高速に連結する方法を考えてるんだが、
Midステートメントを使った置換そのものは早いんだが、クラス化すると処理全体としては&演算子を使った連結の方がなぜか早くなる。
可能な限り文字列型への代入は避けてるし、引数もByRefにしてるんだが、イマイチ原因がピンとこない。
StrPtrでm_bufferのポインタを確認すると、クラス内から見ればポインタはずっと同じだが、
呼び出してる外部モジュール側から確認すると、AppendやToStringとかのメソッドを呼び出す度に2つのアドレスを行き来してる。
これは自分のやり方が悪いんだろうか? コード晒してくれればボトルネックになってるとこを見つけれるかも
今日暇だからやってみるぞ >>413
配列に対してDelete出来るの?
>>417
どうやってるのか知らんけど、
ループ内でProperty Get使ったら、物凄く遅くなって、
やっぱ俺2次元配列でいいわwwwwってなったことはある。 >>419
まあ、自分の書いたコードなんて単なる設定
利用したルーチンがほぼほぼお仕事する
何を使うかで1万倍ぐらい違うこともあるだろ(笑) >>419
> 配列に対してDelete出来るの?
配列と比較してシート側の削除を検出するってことじゃないかな >>418
ありがたいが、今ぱっと出せるのがクラス部分ぐらいしかない・・・
(StringBuilder.cls)Option Explicit
Private sBuf As String
Private iBuf As Long
Public Sub Initialize(ByRef tSize As Long)
sBuf = String$(tSize, vbNullChar)
iBuf = 0
End Sub
Public Sub Append(ByRef sValue As String)
If iBuf + Len(sValue) > Len(sBuf) Then sBuf = sBuf & String$(Len(sBuf) * 2 + Len(sValue), vbNullChar)
Mid(sBuf, iBuf + 1) = sValue
iBuf = iBuf + Len(sValue)
End Sub
Public Function ToString() As String
ToString = Left$(sBuf, iBuf)
End Function
https://excel-ubara.com/excelvba4/EXCEL271.html
のに少し手を加えただけなんだが(class_initializeでなく、呼び出し側が必ずinitializeを呼び出してサイズを決めるようにした)。
呼び出し側のコードが今手元になくて夜中までちょっと無理なんだが、やってる中身は、
Set objStringBuilder=New StringBuilder
Call objStringBuilder.Initialize(CONST_SIZE)
For i=1 To Len(srcStr)
Call objStringBuilder.Append(convertFunction(Mid$(srcStr,i,1)))
Next i
Let MainFunction=objStringBuilder.ToString
みたいな感じ。実際はもうちょい複雑だが、&使う方はここが
For i=1 To Len(srcStr)
Let MainFunction=MainFunction&convertFunction(Mid$(srcStr,i,1))
Next i
になってる、ぐらいなもん。
やっぱ、文字列型変数の評価回数が多いせいなんだろうか? 行数制限でギュウギュウになってしまった。ごめん。
あと呼び出し側もOption Explicitつけてるので。一応。 >>422
そゆこと
説明不足だった
SQLの発行というのは、SQL Server等の外部DBに対して なぜかちょうど今やってることと2連続で関係してる
DB編集画面は結局フラグ式にしたけど
自分用なので、ユーザーフレンドリーより処理の単純さと自分的な分かりやすさを取った
文字列連結も改めて整理しようとしてたところ
Midは固定なら速いが、可変だと遅い
■100文字を10万回連結
・固定: 1000万字確保: 0.08秒
・固定: 5億字確保: 2.5秒 (20億字はSpace関数が駄目だった)
・可変: 2万字ずつ拡張: 3.3秒
1000万字だって十分あり得ないし、なんなら2万字でも、実際に拡張する場面はないとは思う
でも心理的にわだかまりが残る
可変の配列は0.3秒だった (ReDim Preserveで後ろへ後ろへ追加、最後にJoin)
ほどほどの固定の超速を取るか、可変の高速を取るか
これも逆に、あり得ない規模でも0.3秒、困る場面はあり得ない い、言い訳?逆に配列をSQLで操作する方法を知らん >>424
cで言うint left() と string left()を比較してみた
left$()の方が早い、これは予想外だったな
Sub foo()
Debug.Print "str: " & Time()
a = Time()
For i = 1 To 10000000
ToString = Left$("aaaaaaaaab", 1)
Next
Debug.Print "str: " & a - Time()
Debug.Print "int?: " & Time()
a = Time()
For i = 1 To 10000000
ToString = Left("aaaaaaaaab", 1)
Next
Debug.Print "int?: " & a - Time()
End Sub
後は文字列評価だけど、どこが必要でどこが不要かは分からないので何とも言えない
全体見ればどこで最適化したいか分かるかもしれない。後はどれぐらい減らしたいか
一日一回のマクロを10秒→1秒に減らしたいってなら寝る >>422
>>429
やっぱそっちか。
配列にDelete出来たら便利だろうと思ったんだけど。 PDFに、AddNewAnnotでテキスト注釈を追加しようとしても、
ポップアップ注釈になっちゃう。
何でだろう?
第2引数には"Text"を指定していて、
Debug.PrintでGetSubtypeを確認しても、間違いなく"Text"と表示されてるのに。 ↑自己解決
× "Text"
○ "FreeText"
こうだった。 100個くらいのxlsxデータを1つ1つ開かずにセル値を配列に格納させたいんだけど
できるだけ速く処理させるにはどんな方法がありますか?
データベース形式のファイルでないのでADO接続は諦めました。 ExecuteExcel4Macro("'[任意のファイルのフルパス]'シート名!R1C1形式のセルアドレス")で、ファイルを開かなくても読める >>428
言語による、処理系の速度の比較
C/C++ のnative・マシン語系 : 100
Java, C# などのコンパイル・中間言語系 : 10
JavaScript, Python, Ruby などの動的言語系: 1
なお、JIT は、フィボナッチ数列・素数などの計算では速いが、普通のプログラミングでは無意味
遅い理由は、I/O, 動的配列(動的コンテナ)などでメモリを動的に確保する、
動的にアドレス計算するなど Excel VBA の速度は Cの100に対してどれぐらい? VBAは中間言語方式だけど、内部構造の違いからC#より遅くてJavaよりは速い Excel VBAはExcelの評価が入るとすげー遅くなるけど、
EXCELの評価ナシならそこまで遅くない
ただ、vbaで速さを求めるのはナンセンスだと思う >>434
ExecuteExcel4Macroで開かずに読めるが、いちいち開いて読むより速いだけで速いわけではない >>434
そもそもxlsxがzipだからなあ。
読み込みより解凍の方が長いんじゃないかと思うくらい。 >>434
定期的にインデックス化するのは他言語なら常識 意外と記憶にないコレクションからの連結
追加時にサイズを記録しといて、最後にぴったりサイズでメモリ確保してMid
(クラス想定)
Public Item As New Collection, Length As Long
Sub Add(Text As String)
Item.Add Text
Length = Length + Len(Text)
End Sub
Function Text() As String
Dim Pos As Long, Var As Variant
Text = Space(Length)
Pos = 1
For Each Var In Item
Mid(Text, Pos) = Var
Pos = Pos + Len(Var)
Next
End Function
配列のJoinは実装のシンプルさがいいんだけど、100字+10万回で0.3秒
こっちは0.15秒という倍の速さで、そこそこシンプル、可変
普通と言えば普通な発想だけど力業のイメージがあって、やってみようと思わなかったのかも
ちなみにFor Eachを番号方式にすると、80秒ぐらいかかってびっくりした
そんな違うんだね >>441
Excelの強みはむしろシートだと思う
ただしデータ処理用ではなく、表示・操作用のグリッドコントロールとして
VSにこんな高速高機能なグリッドコントロールはない、はず(知る限り)
特に CopyFromRecordset の異様な速さ
大量に表示した状態での動きも速い
DBの表示媒体として実は最強だと思う
(他の言語からExcelを呼び出してもいいので、VBA限定ではないけど) セルA1からはじまる、5万行30列あるディレクトリツリーを、グループ化したいんですが、
最初のA列のみはエクセルのグループ化でうまくいくけど、B列以降がうまく行きません。
VBAでいっぱつで処理できる方法ってありますか。 >>446
何か勘違いしてない?
エクセルが速いなんて全くないんだけど >>446
sed や tail などでいい
30GBのテキストも0.04秒で tail できたし
編集も sed は問題なかった
行数上限がない理想的なExcelが将来でても
そういう大きいDBはしんどいんじゃないかな? つうか普通に10万レコード辺り越えたら遅いだろ
DBを舐めすぎ つうかDBは同時接続数が多くなるほど威力を発揮する
単一接続のエクセルと比較するのがどうかと思う 質問です。
長さAに対して等間隔の点のピッチを計算したい。欲しい答えはピッチ長さ、両端の数字。
条件
両端は同一数値で30以上50以下。ピッチは190以上220以下。
共に50と220の整数に近い数値。
結果
長さ 1200
ピッチ 220☓5
両端 50
こういった計算って結構面倒くさいですか?
関数電卓で計算する分には出来ますがVBAだと全く思いつきません。
宜しくお願いします。 >>452
Aの長さによっては絶対に答えが出ない場合があるけど、その時はどうすんの? >>452
Aの長さによっては、答えが2種類出る場合があるけど、その時はどうするの? >>447
うまく行かないとはどういう状況?
>>452
電卓でもVBAでも他の言語でも考え方は同じ >>455
同じ文字列なら重複分を消してセルは残して最後にグループ化という感じのをやりたかったのですが、
結局ピポッドでそれっぽいの作成して上司にぶん投げたらOK出ました。 >>453
>>454
Aの値は整数または小数点第1位まで。
優先は
ピッチが整数
答えが出ない場合はエラーメッセージ。 Prelude> let collectPitch = [(t,p,n)| t<-[30..50],p<-[190..220],n<-[1..10], 2*t+n*p==1200]
Prelude> collectPitch
[(30,190,6),(50,220,5)]
Prelude> last collectPitch
(50,220,5)
Prelude> 218*2+50*2
536
Prelude> 220*2+48*2
536
つまり長さが536 の時に (pitch,truncate)=((218,50),(220,48))の
どちらが欲しいのかわからないな >>460
ありがとうございます。
220に近い方が欲しいです。 >>461
仕様をはっきりさせないから答えが分からない
単純に220から190まで回して両端が指定以内で良いだろ 勤務表の作成目的での使用は可能でしょうか。
50人の職員で勤務時間帯が7種類あり、休み希望や特定の勤務帯の希望があれば絶対にその希望にしなくてはならない。希望を入れたらあとは乱数で勤務表が出来るなんて事は可能ですか? 可能。
勤務が集中したりして不満がでたり、法令違反になるような勤務表になる場合もあるが。
当然解無しもある。 >>463
そういういい加減な仕様で作っても意味ないだろ
後は乱数・・・でいい訳ないやん >>463
そういうSaaSいくらでもあるから契約しなさい
貴方がゴミを自作するコストよりよほど安上がりです >>449
「DB」というのは、SQL Server等のDBサーバのこと
Excelを「DB」という言い方したことはないよw
そのDBサーバの内容を動的に転写して、
編集画面として使う場合、Excelが最速ってこと
編集画面なので、元データが100万行あっても、表示するのは人間が作業できる数十行や数百行
根性のある事務員がいると、千行ぐらい一気に扱えるよう要求される場合もある
千行ぐらい行くと、一般のグリッドコントロールでは動作が重くなるが、Excelはすぱっと動く、という話 >>448
>>450
>ただしデータ処理用ではなく、表示・操作用のグリッドコントロールとして>>446 ユーザーフォーム内にwindows explorerを埋め込む事は可能でしょうか?
windows explorerを個別に動作させたいです >>470
埋め込むことと個別に動作させることは矛盾してない? >>471
ユーザーフォーム内に複数のexplorerを埋め込んで、それぞれを独立して動かしたいです。
例えば、explorer1、2、3があるとしてexplorer1でディレクトリ遷移したらexplorer2や3はexplorer1に追従しないようにしたいです。 >>472
ユーザーフォーム内にexplorer1、2、3がある想定です >>465
可能は可能なのか。
ありがとうございます。
年数別に分けてどの日も平均年数になるようにする事も可能ということですよね。 >>474
どのプログラムも厄介なのは外界とのやり取り
本当にどんな乱数ひいても仕事は回るの? >>474
あなたは必要な用件が例えば20有るところ今2つしか言えてない
各自への負荷分散や希望労働時間も考慮すると乱数なんて使わない
仕事分かってない奴は仕様も作れない >>472
エクスプローラー3つ起動してWinAPIでウィンドウサイズと位置を常にユーザーフォーム内にあるようにする
しか思いつきませんでした 作り始めてみないと作れるかどうかなんか分からない
作ってみりゃいい
ダメなら使わなければいいだけ
そうやって上達していく 適当に作って上達って・・
ちゃんと考えなくっちゃ上達なんてない 質問です。
セルB2の時間から4時間5秒後の時間をセルC2に記載したいときどのようにコードを書けばいいでしょうか?
セルB2が文字や数字だとC2は""でB2が時間のときだけC2に4時間5秒足したいです。
時間を足すだけなら
range("c2").value = DateAdd("s", 14405 , range("b2")
)と書けばいいのは解るんですが、分岐処理が上手くかけません。 >>463
乱数は偏っているから、使ってはいけない!
例えば、50人の場合、
5人は10回選ばれて、別の5人は0回など、極端になるから VBAはセルの追加削除に追随出来ないから関数で十分なものは関数を使うべき >>476
まあ、必要要件をまとめられないのは、何が必要かもわからないからだよな
それを知るためにも、>>466さんの言っているように専門家と契約するのが
一番コストが低く済むな
自分で作る、このスレで質問するなんて要件難しくて無理だから なんでお前らが他人の業務心配してんの
回答は
VBAで出来ますよ
で終わりだろ >>487
でも、お前Excelもろくに使えないだろ(笑)
VBA使う意味ないんだよ >>462
もう少しわかりやすく書いてやれよ
数値ピッチを宣言して
ピッチでMaxからMiniまでStep-1で回して
長さとピッチのモッドが60-100に収まればOK
そのピッチの値、ただこれだけ あ、エラーはピッチがMiniより小さかったらエラーだな(笑) >>477
普通はWebブラウザコントロール使うと思うんだが。
完全に一緒じゃないけど、よっぽど現実的。 ExcelVBAのユーザーフォーム上で、PDFを表示、操作をしたいです。
ですが、ユーザーフォームにコントロールを追加しようとすると、
「要素が見つかりません」とダイアログが表示され出来ません。
どなたか解決策をご存じの方がいましたら、教えていただけますでしょうか。。
Acrobat pro DCはインストールしてあり、ExcelはOffice365を最新の状態で使用してます。 バーコードたくさん作って印刷するプログラム作ってるんだけど
一筋縄ではいかないな
いろいろエラーが出て大変だわ
しかもステップインしながら様子みようとすると
中断モードでは入力できません
とやらのエラーがでる
回避する方法はあるようだけどめんどくさそうだ >>494
バーコードってバーコードフォントがあるから楽勝だよ
気をつけるのは頭の0が消えないように文字列にするぐらい >>495
それって外部からフォント導入しないといけないやつですよね?
会社のPCでやってるんでだめなんですよね
今はこれ↓を参照して使ってます
Microsoft Access BarCode Control 14.0
重いしエラー出やすいし別の方法があればいいんですけど フォントの導入も出来ないのか
それはさすがにキツイなぁ >>496
バーコード 作成 サイト
で検索したら出てきたよ
https://barcode-place.azurewebsites.net/
他にも色々あるから探してみてはどうかな >>498
ありがとう
でも、そもそもネットすら自由に使えないんですよね
あと、数百個作って印刷するので、ネット経由だと時間かかりそう
お客さんがらみの情報を外に出すことに上の人が嫌がるだろうということを考えると
ローカルで終わる仕組みがないと厳しいですね 牢獄かよwwwww
・フォントを作る。
バーコードは0-9の10個しかない
svgで作ってローカルのhtmlに表示させる >>500
バーコードにも色々な種類があってだな。。。
JANコードでも表現できるキャラクターは10種類の数字だけだけど、コードは20種類あって適切に並べないといけないんだぜ >>500
セキュリティが特に厳しすぎるというよりも、意識が昭和なんですよね
人員削減されるからエクセルマクロつくるなとか面と向かって言う大御所もいるんで
とにかく目立たぬよう、些細な問題であっても起きないよう・・・と神経使うんです
今エラー回避の大きな進展があったのでなんとかこのまま組んでみます
Forで回しながらバーコードを作成・セルに配置していくんですけど
配置したセルの左上にナンバリングするコードを入れるとエラーで落ちるんですよね
バーコードを配置する処理と、ナンバリングする処理を異なるForで分けたらエラー出なくなりました
それ以外のコードは同じなんでなんだか理不尽なのですが、
理屈から攻めるより、多様なコードを試して見てどれがいけるか試して見るという
数打ちゃ当たる的な攻め方をするしかないみたいです
ステップ実行できないのがつらいですが >>502
どう考えても自分でバグに気付いてない
オブジェクトの指定が間違ってる可能性が一番高いから、何もかも省略せずにきちんと書いてみ なんとなく画像のバッファかなんかが溜まってる気がする
screenupdateをtrueにしたまま回すと多分落ちない気がする >>504
それっぽいのかなと思ってます
起動して初回の処理は何の問題なくいけるんですけど
2回目ボタンを押して別のバーコードを作ろうとするとエラーがでるんですよね
印刷処理が終わった直後にバーコードや連番すべてを削除するコードを置いているんですけど
おそらく何かが残っているんじゃないかと思います
今の所は>>502で書いたように処理を分けることでうまくいってます
原因特定できたわけじゃないんですけどね
全削除のコード自体はそのままなので、ここに問題はないんじゃないかと思っています
ScreenUpdatingはFalseにしても以前のコードだと同じようにエラーがでますね
それだけじゃなくて、実用には耐えられないレベルで遅くなります
>>503
1.もしオブジェクトの指定が間違えているとするなら初回でもエラーがでるだるはず
2.今のコードと、バーコード配置直後にナンバリングするコードでオブジェクトの指定は同じ
なので、やはり原因とするには矛盾があるかな
最終的には、負荷を減らすために、1ページ分バーコードを作ったら
その都度印刷+全削除を繰り返すことで全て印刷するという形で組んでいこうと思っています
バッファ絡みだと嫌な予感もしますが、原因特定はできなくとも、エラー回避方法は特定できてきたのでなんとかなるかなと >>505
>ScreenUpdating
これは残念
地味に自信があったのにw
>ゴミどうこう
恐らく当たっている
vbaはGC、ガベージコレクション・・要は前の作業のゴミ掃除が貧弱
一番わかりやすいのは、新しいbookをデスクトップが同じフォルダにでも作ってそこで作業させること
コード上は色々とややこしくなるが、大分緩和される
多分一番いいのはVBS、Excel外から作って、Excelをそのたびに再起動させる事
それならまず大丈夫 こういう問題が出て
https://gyazo.com/6bbc43b5a4346db69404d52e985b0244
https://gyazo.com/faf8012dcb22cdd442c687663f1e7524
セル番地(F10)について、次の問1から問3を解答しなさい。
問1 セル番地(F10)を複合参照で列を固定した答えを記入しなさい。
問2 セル番地(F10)を複合参照で行を固定した答えを記入しなさい。
問3 セル番地(F10)を絶対参照で列と行を固定した答えを記入しなさい。
1,SUM($F5:$F9) 2,SUM(F$5:F$9) 3,SUM($F$5:$F$9) と解答したら全て間違えてました。
解答が分からないので教えて下さい。 >>507
Excelスレで完全に合ってるから教師に聞けと言われてる奴だろ
一応見直したけど合っている
教師に何が間違っているのかを聞いたほうが良い >508
そうです。でも全てバツが入ってました…。
返却されたプリントに、"セル番地(F10)についてここのみで記します"と書いてありました。
自分には意味がさっぱりですが何か分かりませんか? VBAのフォームのテキストボックス内のフォントサイズが場所によってまちまちなんですが、
どうしたら統一できるでしょうか?
因みに、
テキストボックスのプロパティ(フォント名、フォントサイズ、ボックス高さ)はすべて統一しています。
https://uploader.xzy.pw/upload/20190727174533_466d653379.png ”ここの外で記します”と書いてあるかも知れないです。先生の字が汚くて読めない…
セル番地(F10)について、ここの外で記します。と書いてあるのでそれがヒントになってると思うのですが。
これを踏まえた上で>>507の解答お願いいたしますm(_ _)m >>510
このスレをその教師に見せろ
その教師は無能でアホだから何も分かっていない
'以下、その教師に当てる連絡
テメーより何十年も現場で使い倒してる連中が全員正解と言っている
つまらないルールがあるならそれを書け、聞いてやった上で正解を出してやるから書き込め
'連絡、ここまで >>512
字が汚くて読めないなら聞け
それで何かあれば全部お前の責任だ
>>516
殺すのは簡単だがもう少し成長させろ >>512
お前みたいなゴミクズが言われたままに従うから教師がつけあがるんだよ
教師に「指示に従いたいが何書いてるか分からないから従えない」
といえば100%回答する
わかるまで聞け >>519
ここで良い
いいから見せろ
ここでなければ教師は切り取って「あー一部がほえてるだけだHAHAHA」なんていうだけだろう >>522
全角やめたほうがいいよ
数字としてプログラムが処理できない
使うとしたらフォトショでクリエイティブな作品を作るときぐらい >>522
ほんとに統一されてるか?されてないから違うんじゃないか? >>511
どうでもいいかもしれんが、何でシートでやらんの
面倒いだけじゃない >>508
列の合計で。C10:E10が正解って落ちなんじゃ > セル番地(F10)を
つまり「$F10, F$10, $F$10」が答えってオチ? >>527
俺はそう解釈したが。
むしろCとかEとか何処から出てきたん >>526
単価バラバラの個数集計して何をしたいんだ? >>507
>>512
”ここの外で記します”だから
F10以外のセルに記する
すなわちF10以外のセルからF10を参照するにはどのように書けばいいかということじゃない?
1. $F10
2. F$10
3. $F$10 >>493
Adobe PDF Reader コントロールです。 >>531
Excelのバージョン違うけど俺も同じエラー出たからWebBrowserコントロールで表示させた for i = 2 to 6
Sheet1.Range(cells(i, 1), cells(i, 7)).Value = Sheet3.Range(cells(2, 1), cells(2, 7)).Value
next i
これがエラー吐くんですがどうしてだかわかりますか?
なおコードは簡略化してあります。エラーが出るところだけピックアップしてみました。 もうひとつ質問です。
エクセルは24時を越える時間をセルに入力するとセルの頭に1900/1/1とついてしまいますがこれを消す方法はないでしょうか。
具体的には
Range("d2").Value = DateAdd("s", 14405 * (cells(2, 7).Value + 1), cells(2, 3))
とやって4時間の倍数を計算したとき24時を越えると時間の前に1900/1/1がついてしまいます。
これがついたときこの1900/1/1の部分を消したいのです。
例えばright関数を使って右の時間の部分だけとろうとしてもシリアル値がコピーされるのか、上手く行きません。 なお書式設定でhh:mm:;ssとしているので見かけ上はちゃんと時間だけ表示されます。
この時間をソートしたとき頭に1900/1/1がついた時間が後ろに回りこんで困っています。 >>54
> この時間をソートしたとき頭に1900/1/1がついた時間が後ろに回りこんで困っています。
そりゃ24時間超えてるんだから下に来るのは当たり前
取り敢えず簡単にやるなら
Range("d2").Value = Mod(DateAdd("s", 14405 * (cells(2, 7).Value + 1), cells(2, 3)), 1)
の様にして少数部だけにすればいい
ちゃんと知りたいなら
Excel シリアル値
あたりでググってくれ どれも初心者が陥る有りがちな罠。
中級者以上なら皆知ってる。 >>541
mod関数を使って余りを求める発想は恐れ入りました。
しかし、コピペで上手く動作しなかったので、シリアル値が1以上だと表示されることに注目して
if文を使って1以上ならシリアル値から−1するようにコードを書き換えました。
今のところ上手く動いてますがmod関数を使った余りを求める方法のほうが遥かにスマートなので
試行錯誤しながらmod関数を取り入れてみたいと思います。
ありがとうございました! >>543
まあ本来modとか剰余とかは整数にしか定義されてないからExcelがちょっと異常だと思ってた方がいいと思うよ >>544
IEEEの剰余演算知らないのか
素人丸出しだな >>532
やっぱりそうなりますか。
僕も代替策でWebBrowser使ってるのですが、こういうの気持ち悪くて。
WebBrowserだと印刷とか拡大のボタン出てきちゃうし。 時間を24以上にしたいなら
表示形式で[hh]:mmみたいに角括弧つける方法もある >>549
ソートするとおかしいと言ってるからそれ関係ない
>>545とかもそうだがチンケな知識自慢はウザイだけ 時刻が昇順に見えなくておかしいなら[hh]:mmで昇順に見えるよ コールバック関数をどういう状況で使うのか分からないんですけど、
↓こんな状況で使う、で合ってますか?
Sub Test()
この中で、関数Aを実行したい場合と、関数Bを実行したい場合がある。
If文で、関数Aと関数Bを分岐するのは嫌。
End Sub 今すぐ実行しないけど、何を呼ぶかは今決めておきたい時 依存関係を逆転するんだよ
AがBを呼ぶ場合、普通はAがBに依存するだろ?
コールバックやインターフェイスを使うことで、AがBに依存しないままでBを呼ぶことができる
それによりAを変更することなくBを別の実装Cに差し替えることが可能になり、Aの再利用性が高まる
まあVBAにはそんな小難しい概念は全く必要ないから忘れていい コールバックは非同期だとめちゃくちゃ便利だけどvbaみたいに一本の処理が続く言語ではあんまり意味が無い
独自関数のイベントハンドラすら無いなら尚更 コールバックは非常に重要なんだけどVBAで出てくるのはサブクラスやフックなんかの高度な話の時や、コールバック使用を前提とするWin32APIの時だな。 ・Microsoft HTML Object Library
・Microsoft Internet Controls
これらを参照したプログラムを社内で組んで使っています。
ベースとなるIE上のページにあるいくつかのリンク先から必要な情報を
とりだしてワークシートに並べるだけの単純なものです
これまでWindows7(64bit)+Excel2010だったのですが
Windows10+Excel2016に近々移行するという話が出ています
そのまま使い続けられたらいいなと思っているのですが、
何か明らかに問題となるような事項はご存じでしょうか?
自分で組んだものなので、修正はできるのですが、アクセスしにくい場所にあるので
事前に知っておくことができれば対応しやすいなと思っています >>557
Win10+IEでは、IEのプロセスがしばらく消えなかったり、読み込み完了してもReadyStateがきちんと変化しなかったりで、移行にはかなり苦労すると思われる
俺はすごく苦労した >>558
その辺は移行後じゃないと分からなさそうですね
一旦使用中止した上で確認することも考えます
ありがとうございます 読み込み完了を確実に知る手段がないからなReadyStateあてにならないし >>561
実は方法はあるんだけど、あんまりスマートじゃないんで他人の使うアプリでは採用しづらい doloopで取得する方法って無限ループになりそうで怖い Excelでソースを見られないようにする方法はありますか?
プロジェクトのパスワードはすぐに突破されるので と思ったけどスマン
dllにして読み込む形なら結構行けるんじゃないかと思った 見た目比較、柔らか比較、直観比較、なんて言うんでしょうね?
どうググればいいのか
スレチなのかどうか
VBAに限らず、C#でも結局、空文字連結が最良だった印象
でも問題にしたい基本はExcel VBA
If A & ””=B & ”” Then
というのは、数字を1セルずつ入力すると数値になるけど、配列でまとめて入れると文字になったり
でも単純に「1」なら「1」なのだとしたい場合
ちなみにCStrはNullでエラーになるので&””の方が便利
便利だけでなく、速度も圧倒的に&””の方が速い
(ちなみにセルのTextプロパティもめっちゃ遅い)
ちなみにセルをString変数に代入してから比較する方が、&””より1〜2割速い
セルにNullを入力しても空文字になるので、セル側には使える
でも用途限定&ソース増えるので、よほどの大量処理で困らない限り、一般的には&””が安定かな
でも昔、「なんで空文字連結してるの?」って誰かに怒られたことがあり、なんとなく後ろめたい
でもテストを重ねるうちに例外に気付き、最初からやっときゃ良かったじゃんとなる
どうなんですかね? >>569
型変換のために空文字列を連結したり0を足すのは、ワークシート上ではよくやるけどVBAでは避けた方がいい
セルの表示内容を文字列で欲しい時はTextプロパティを使うのがセオリーだし、自分でも書いてるけどString型の変数に代入するべき >>558横からすみません
すごく苦労した部分の詳細や対応策を教えていただけないでしょうか >>573
俺が試行錯誤の末に発見したのは、IEオブジェクトのVisibleプロパティが変化するとReadyStateが更新される、ということ
だから
objIE.Visible = False
objIE.Visible = True
という2行を読み込み完了チェックのループに挿入した
あと、IEが非アクティブになるとエラーで止まることがあるので、マクロ実行中は一切さわってはいけないという制約まで付く
ここまでやって、画面がものすごい勢いで点滅するけど、一応の結果は得られるようになった
あと、Win10の次の大型アップデートでIEの動作がまた変わるかも知れないので、いつまでも使える保証がない
JavaScriptやcookieやセッションの管理などが必要なければXMLHTTPを使った方が簡単で確実 タブブラウザで新しいタブに追加する方法はあれから発明されましたか? >>574さん
ありがとうございます
すごい参考になりました
時々ReadyStateが更新されずDo-Loop抜けずに困っていました 今でもIEなんて使ってるのお前らだけだろ
あんたの会社はセキュリティとか気にしないんだね >ここまでやって、画面がものすごい勢いで点滅する
なると思ったけどやっぱりなるんだ
>>577
ブラウザの解釈が必要なところはどうしてもあるんだよ
ただのスクレイピングでいいなら色々な方法があるけどやっぱりキツイ textプロパティ遅いからデータ量が多くない時しか使えない >>569
セルに数字入れたら文字になるというのは、RangeのValueに入れてるからとかでは >>569
自分一人しか見ないならどっちでも良いよ
他の人への見やすさを考えると関数の方が良い
文字列連結で考えられるのは
・仕様を検索し辛い。str()なら一発で見つかるが、文字列連結によるエラーなどはどう探していいのか分からん
・そもそも何をしているのかも分かりづらい。本来は文字列を入れるつもりだったようにも見える
・この記述でどういうエラーや分岐が発生するか不明。nullやDATE型が入ってる場合など
見た目比較
tostring = Str(1)
tostring = 1 & ""
どうしても使いたいならコメントをつけるなどした方が以下も知れないけどこれもアホらしいな
tostring = 1 & "" '文字列化 str(1)は"1"にならない
strは符号付文字列化だから あぁCstrじゃないとダメなんだっけ
ずっと忘れてたわありがとう
今までのコードかなり間違えてる気がする >>584
ちょっとしたテスト用ならs
それ以外は何の文字列かがわかる名前 >>577
IEの代わりに何を使っているのですか? 仮にIE使えなくなったら、どうすりゃいいんだろう?
UIAutomationでも使うの? >>588
原理上は、EdgeでもChromeでもどんなブラウザでもVBAや外部アプリから操作できる
あとは必要なライブラリのインストールが許可されるかどうかで決まる
とりあえずEdgeは簡単にコントロールできるよ
https://www.ka-net.org/blog/?p=6018 タブブラウザで新しいタブに追加する方法はあれから発明されましたか? >>590
その操作必要?
二つオブジェクト作れば良いと思うけど、ダメなのか ウインドウが二つになってしまうんですよ。タブじゃなく。 DOSは演算子で分かれてるんだよな
==は文字、EQUは数値
&””が高速なら、専用演算子があればもっと高速になるような
ちなみにStrCompも遅いし、Nullはエラーになる
ちなみにDOSもNull問題と似たような<ECHO は OFFです。>問題があって、
やはり”%HOGE%”==””みたいな、文字連結しながらが標準 >>589
あまりにコードが長いので、Pythonにするわ。 タブブラウザで新しいタブに追加する方法はあれから発明されましたか? Win95のハンカクからゼンカクになった時はえらく間抜けに見えたものだ JSObjectのaddAnnotで、PDFに注釈付けてるんだけど、
getProps → プロパティ変更 → setPropsで、
何故かtextSizeだけが反映されない。
他の、strokeColorやcontentsは反映されるのに。
何でだろう?
エラーも出ないし。
直接setPropsなら設定出来そうなんだけど、
引数の順番がわからん。 ↑ちなみに、typeとtextSizeを同時に設定しようとすると、サポートされていない云々のエラーが出るので、
先にtypeを設定してからtextSizeを設定するようにしてる。 ↑解決はしてないんだけど、おそらくこれしか無いだろうと思われる答えを見つけたので、一応自己解決。
ググったら、海外でも同じ現象が起きている人が何人かいて、
自動翻訳を頼りに調べたら、「そこだけJavascriptで書け」ってのが答えらしい。
なんでだよwwww マウスが滑って列幅やグラフをいつのまにかズラしてしまう心配
ActiveSheet.Protect Contents:=False, UserInterfaceOnly:=True
どうも、Contents:=True にしないと列幅固定できない様子
でも Contents:=False にしないと、
ActiveChart.Axes(xlValue).MaximumScale = 100
こういうのでエラーになる
(DrawingObjects:=True は関係ないっぽい)
とりあず Contents:=False でグラフのズレだけは防止できるので列幅は諦め中
Workbook_SheetActivate で保持して Workbook_SheetDeactivate で戻すとか
そういうことはなんとなくやっちゃいけない気がする グラフはなぁ・・。
間にDoEvents挟むと収まる謎のエラーとか、ワケワカラン。 DoEventsはExcelでなんか処理がたまってメモリが爆発するのを回避してるんだろうなぁとかポインタが暴発してるのかなぁとかふんわりと考えている 配列に、大量のセルの値を一気に入れると、メモリ不足のエラーが出るけどさ、
行が65536から1048651に増えた時点で、やばいって気づかなかったんかい! VBAは既に非推奨になっていて今後改良されることもExcelの仕様変更に追従することもない
ヤバいとしたら未だにVBAを使っていることがヤバい >>611
>VBAは既に非推奨になっていて
詳しく Excelにpythonが載るらしい事と関係ある? 乗らないよ
アドインで作るならpythonせもC3でも書ける 環境の仕様上、仕方なくexcel_vbaからedgeを操作するコードを書く必要があります。
ieのようにcom?ole?オートメーションより操作する方法が用意されていないことが分かりました。
結果的にwebdriver経由以外は操作不可という認識です。
>>589の方も書かれている通りなのですが、
楽をする意味でもseleniumbasic+webdriverの組み合わせが最善なのでしょうか? >>616
Javascriptにしとけって
なんでわざわざ難しくするのか理解出来ない jsを管理ツールにぶっこんで動かすほうが100倍早そう Jacascriptならタブブラウザのタブにページを追加することはできますか? 「環境の仕様上、仕方なく」って
そんなに難しい日本語だっただろうか?
JavaScriptは理解出来ても日本語が弱いなら
とりあえずJavaScript板から出て来るなと >>620
ありがとう。ところでVBAからJavascriptはどうやって呼び出すのですか? >>621
回答してあげれば?
>>622
あぁ、すまん
JavaScript疑似プロトコルを使うのが楽だと思う
https://www.vba-ie.net/ie/javascript.php
の
「IE(InternetExplorer)のJavascriptを実行するサンプルコード」
の部分
要はURLに
javascript:〜
とjsコードを書いてページ遷移させようとするとコードを実行できる。もちろんページ遷移はしない >>616
COMオートメーションで操作できる。
Edge内の部分にIE相当がいる。 internetexplorer_serverがその部分。 IEページ内の特定文字の表示されたリンクをクリックする簡便な方法ありませんか? >>626
漠然としすぎてたので少し補足します
すでに開かれたIEで、
特定の文字列の入ったリンククリック
特定の文字列の入ったボタンクリック
ラジオボタンクリック
検索窓に文字入力
ダウンロードボタンをクリックしDL画面から保存
この流れを実行したいですどうかお助けください 簡便ってどのレベルかわからんけど、
getelementsbytagname("タグ名")(0).clickより簡単なのは知らん。 >>627
なんとか途中までは出来ました、ありがとうございます
ただ、ダウンロードダイアログが出るまで待機する処理がわかりません、おたすけください >>631
ダウンロードウィンドウ出るまで待機&出たら保存クリックのやり方がどうしても思いつかない・・ >>632
ダイアログが出るまで、ループ中にFindWindowとSleepを入れて待つ。 よーしパパ同じ名前のウインドウ別プロセスで立ち上げちゃうぞ 2019/8/14配信のWindowsUpdateを適用すると、Windows 7/8.1/10(全バージョン)で、
・VBVisual Basic 6 (VB6)で作成したアプリケーション
・Visual Basic for Applications (VBA)で作成したマクロ
・Visual Basic Scripting Edition (VBScript)で作成したマクロやアプリケーション
が応答しなくなり、『invalid procedure call error.』と表示される場合があるという
不具合が発生している模様。
WindowsUpdate 2019年8月度 注意事項と各KBメモと直リンク [Update 4: VB関連死亡]
http://blog.livedoor.jp/nichepcgamer/archives/1074802426.html
2019年8月14日のWindowsUpdate後、VB関連が死亡。Windows10全バージョンにて
http://blog.livedoor.jp/nichepcgamer/archives/1075495666.html >>637
> 2019年8月14日のWindowsUpdate後、VB関連が死亡。Windows10全バージョンにて
> http://blog.livedoor.jp/nichepcgamer/archives/1075495666.html
この記事で、Win10のバージョンと不具合の生じたKBの対応表があり、
https://i.imgur.com/gyz63Lm.jpg
先日(8/14)のアップデートが正に該当KBだったが、
https://i.imgur.com/4jCXivm.jpg
試しにExcelのVBAを実行したところ、何の問題もなく実行できた
記事をよく見ると、
「invalid procedure call error.』と表示される場合があるという不具合が発生しています」
『表示される場合がある』だから、マクロを作りまくってるところは確認が大変だろうねぇ スレ勃った
【アプデ/10】 2019年8月14日のWindowsUpdate後、VB関連が死亡。Windows10全バージョンにて
https://asahi.5ch.net/test/read.cgi/newsplus/1565930238/ 普通企業だといきなり素でwindowsupdate当てなくね?
wsusとかsccmとか使うでしょ >>641
ちょっとした企業ならそうだね
まあ直接MSにつないでアップデートする不届き者がいたりするけどw windows10の強制アップデート阻止できんの? >>643
10 Proなら手動更新に変更できる
【Win10】 Windows10 Proの自動更新を無効にして手動更新にする方法
〜更新プログラムの有無だけ自動確認編〜
http://blog.livedoor.jp/nichepcgamer/archives/1069099391.html >>634
URLないので使えないと思われます
>>635.636
馬鹿なのでもう少しkwskお願いします・・お願いします・・ いまホットな話題のParamArrayについて誰か詳しく VB6、VBA、VBScriptの不具合の件、MSが対応策を取ったことで>>637の2ページも更新された。
Windows7はKB4517297、Windows8.1はKB4517298を手動ダウンロード後、適用で修正。
Windows10は、v1903/v1809/v1803が8月下旬、v1703/v1607/v1507は数日中の修正予定。
v1709のみ8月17日公開のKB4512494で修正された。 VBAでもPythonでもないなら何を推奨してるんですか?ExcelマクロはVBAでやるしかないんだけど。Excelを使うなってことかな。 質問です。以下のようにArraylistにPersonを5つ、それぞれ1から5の番号をつけて追加して、そのあとセルに表示というコードなのですが、
Dim per As Person
Set per = New Person
を、Dim per As New Person に一行でまとめるとセルの出力が全部5になってしまうのですが、
これはどういった理屈なのでしょうか?
一行でまとめて書いていたのでこの仕様に気づくまでかなり苦戦してしまいました、、
'--------------------標準モジュール------------------------
Sub test()
Dim col As Object
Set col = CreateObject("System.Collections.ArrayList")
Dim i As Long
For i = 1 To 5
Dim per As Person
Set per = New Person
per.num = i
col.Add per
Next
For i = 1 To 5
Cells(i, 1) = col.Item(i - 1).num
Next
End Sub
'--------------------------ここまで--------------------------
'----------------------クラスモジュール(Personクラス)-----------
Public num As Long
'----------------------------ここまで-------------------------- https://sites.google.com/site/kanaetechwiki/vba/-vba-newtokonsutorakutanitsuiteno-zhu-yi-shuki
この辺が分かりやい?かも
宣言時にnew書くと変数の初回参照時に暗黙的にインスタンスが作成される
質問の例だと宣言時newにした場合、インスタンスはループ初回に一回しか作成されなかったものかと >>654-655
なるほど、一行だとpersonが一つしかインスタンス化されてないからコレクションの中身が全部
同一のpersonを指していたのですね、、
またDimの仕様も初めて知りました
VBA特有なのでしょうかね
ありがとうございました! VBAなんて死亡で何も問題にない
やっと消えてくれて良かったよ
MSグッジョブ! >>657
VBA使わなかったらExcelは何を使って動かすの? Excel 使わず perl python R などということでは? 任意の言語でExcelObjectをCreateするんやで 事務職がある限りExcelはあるし、事務員はPython出来ないからExcelマクロしかない。VBだから安くて済むのに事務員もPythonやるようになれば給料が高騰するな >>646
待つのはこんな感じ。
Do
戻り値 = FindWindow(ダイアログのクラス名, ダイアログのキャプション)
Sleep 1000
Loop While 戻り値 = 0
>>636みたいな嫌がらせをうけたら誤爆するけど、まあ普通はないでしょう。 PythonがExcelに搭載されていないとデメリットが大きいので使わんよ。 エクセルに古臭いVBAしかない理由って知ってる?
アップデートもなけりゃ最新言語に対応もしない本当の理由知ってるか? >>665
Excel自体にそこまで需要がないから。最新言語を対応させても得られる利益は変わらない VBAに需要がないのは間違いない
誰にも必要とされてない
お前らの独りよがり
じゃなきゃコミュニティも盛り上がるはずだけど全く超低空飛行 Excelマクロなんて事務員くらいしか使わない。マクロを使わなくてもいいようなシステムを開発したらいいだけ。企業はマクロよりRPAを使うようになってきてる。 末端の人がパーフェクトに便利さを感じられるシステムを
会社が構築してくれたらいいんだけど
実際はそういうわけには行かないわけで
隙間をうめるためのお手軽自動化ツールとしてVBA使う事になる
うちではそうだわ
VBAがなかったらクソくだらない作業を手作業でちまちまやらないといけなくなる VBAなんて使わない方法を考えたら?
もう世間は誰もVBAなんて見向きもしてないから現状はこうなんだよ
いつまでも昔のやり方を変えないのもどうかと思いますよ
時代に合わせよう Excelに付属してるから管理が厳しいところでも配布しやすいから使ってるだけ
時代も何も使えなくなったら代替手段探すだけのこと 個人的なものは好きにできるが、仕事の場合それはできない クソ言語にしがみ付くなって
VBAなんて将来性もゼロの全く価値のない子供向けのお遊びコード 子供のおもちゃが企業で使われているので
コチコチ頭の上司たちが変わるまでは仕方がない >>663
ありがとうございます!
明日職場で試してみますね。 >>684
ミスると永久ループになるので、n回トライしてダメならExit Doするようにする。
分かってると思うけど念のため。 ExcelもPythonで動かせるようになるんでしょ? まーPythonが使えるようになると
一挙に統計の計算で出来ることが増えるようになるらしいけど
お前らObject指向すらままならないのに
関数型言語なんて覚えられるの? 無理
そんな事が出来るなら今どきVBAなんて使ってない >>690
Excel自体がオブジェクトなので
cells(1,1).value="foo"
だけでも立派にオブジェクト指向
問題はオブジェクトを操ってる感覚が少なすぎることかもな pythonはpandas辺りの数学系ライブラリがめちゃくちゃ便利なだけで言語としては至って普通だと思う >>689
これのどこを読んだら「マイクロソフトが Excel に搭載するのは JavaScript であって」なんて出てくるんだろう?
Cool to see the excitement around Python.
We had an awesome response to our survey on the Python UserVoice item. We’re working on the best way to address that feedback.
・In the meantime, these are some great tools you can use like PyXLL and XLWings
・Additionally, you can also host your backend logic via a web service in any language, including Python, and you can use web add-ins or a custom function to call that web service. >>690
逆だ。
どんな環境でも対応出来るからVBAでやってる。
他の環境になったら対応すればいいだけ。 VBAが出来ればPython簡単でしょ。プログラミング何も知らなくても一か月あれば覚えれるし! hellshake矢野と聞いてすっとんで来ました。 初心者質問ですいません。
下のコードで、Range("V3:V8")だと何事もなく範囲を指定できるのですが、
Range(Cells(…),Cells(…))だとエラーが出てしまいます。
何が悪いのでしょうか?
Worksheets("シート1").Activate
ActiveSheet.ChartObjects("グラフ1").Activate
ActiveChart.PlotArea.Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).XValues = Worksheets("シート2").Range("V3:V8")
ActiveChart.FullSeriesCollection(1).Values = Worksheets("シート2").Range(Cells(3, 3), Cells(8, 3)) >>703
シートを指定せずにセルを指定してるから あー、そういうことでしたか!
初歩的なミスですね、、ありがとうございました!!)^o^( すいません、もうひとつ助けて頂けると嬉しいです。
ActiveChart.FullSeriesCollection(1).Name = Worksheets("シート2").Cells(3, 3)
で、参照先のセルにはユーザー定義にて"8月19日"のように◯月◯日形式で表示させていますが、
グラフ凡例には2018/8/19のように表示されてしまいます。
凡例にも参照先のセルと同じように◯月◯日形式で表示させる事は可能なのでしょうか? 左辺よくわからんけどString型っぽいから
Worksheets("シート2").Cells(3, 3)を
Worksheets("シート2").Cells(3, 3).textにするとか >>708
グラフ側に、書式も合わせる設定なかったっけ >>708
Format(Worksheets("シート2").Cells(3, 3).Value,"MM月DD日") この程度の事も解決出来ないなんてセンス無さすぎだから職を変えた方が良い >>709-711
ありがとうございます!なんとか出来ました!
助かりました〜、思い通りに走ってくれて嬉しい〜 >>712
最初は誰もが皆初心者という事で許してくださいませ! >>714
そいつただの荒らしだから相手しなくていい >>716
「.net」ドットネットというのは便利な関数がめちゃくちゃたくさん入ってる箱
マイクロソフトががんばって作った
それがVBから一発で呼び出せるように準備されてるのがVB.net
別にVBAからでも使おうと思えば使えるけど調べるのが大変 >>720
その説明は...
ちょっとマズいんじゃね? >>716
VB.netをOffice特化にしたのがVBA それでいいよ
VB.NETの方が早く消滅しそうだし 歴史的経緯を知らないと理解できない変な制限や仕様が多い
そういう意味ではかなり難しい Python vs Excel 五番勝負 - 仕事で使えるのはどちら? 2019/08/21 14:37 クジラ飛行机
https://news.mynavi.jp/article/zeropython-53/
第一回戦 - どちらが気軽に使えるか?【判定】気軽に使えるのは、Excel。ただし、
Excelは有償。また双方ともWebブラウザからも使えるなど利便性は互角。
第二回戦 - CSVファイルが見やすいのは?【判定】美しく表示されるのは、Python。
ただし、Excelは汎用用途に特化しているのに対して、PythonライブラリがCSVファイルの
読み込みに特化していることが理由。
第三回戦 - グラフが作りやすいのは?【判定】引き分け。マウス操作で直感的に操作
できるのはExcelだが、Pandasやmatplotlibのライブラリに習熟していれば、Pythonでも
簡単に描画できる。
第四回戦 - 複雑なグラフが作りやすいのは?【判定】引き分け。
第五回戦 - 集計してみよう【判定】処理が複雑になればなるほどPythonが優勢。 >>727
> 歴史的経緯を知らないと理解できない変な制限や仕様が多い
32KB縛りとかあるけど、言うほど制限多いか?
具体的に数件挙げてみてくれる? 事務職がPythonやり始めたら自分でシステム作って回せるからシステム屋なんていらないよね >>731
と思うだろ
ネットワークにセキュリティにハード等次々と恐ろしい壁が立ちはだかる
極めつけは社内のお局さま
「いままでこうやってきたから」 セキュリティはプロに委託しないとまずいだろ
あれ対人戦だから >>732
それ
最後の1行
それで全てが終わるんだわ そういう問題じゃないな
インフラこそ企業による差異もなく誰がやっても同じで雑事として他人任せでいいもの
経験値がないとスパゲッティ化して要件変更に対応できなくなったり、直せなくなったり
あるいは処理速度、使いやすさ(業者にも上手い下手あるが)
そもそも業務要件自体がSEが入らないと整理できなかったり、入って初めて抜けが発覚したり
「作れるか否か」と「言語仕様」に相関があると思ってるのが素人
もし「作れる」なら、他の言語でも作れたはず 5Gになるとハードとかネットワークとかクラウドで利用出来るようになるから、個々でハードを所有する必要がなくなってくるんでしょ
簡単なシステムはコーディング不要でドラッグするだけで出来る物になるらしいじゃん VBAでは函数は呼び出すところより後に置く必要があるの?
C言語では呼び出すところより前に置く必要があるのに。 グローバル変数を先頭に書くルールはあるけど関数位置のルールはないよ >>739
そうですかあ。助言してくださってありがとうございました。 >>738
> C言語では呼び出すところより前に置く必要があるのに。
前で定義すればプロトタイプ宣言がいらないって言うだけのこと
プロトタイプ宣言書いとけば前後関係はどちらでもいい 個人でPCを所有する時代も終わるし、全部クラウドで出来るから、AI作れるくらいじゃないと稼げなくなるよ
VBAなんか動けばなんでもいいんだよ。自分のルールでやればいい。
勉強しても事務職が自動化されてExcelももうすぐ終わるし無意味。 >>742
今から「時代が終わる」日まで飲まず食わずで過ごすの? 全くVBA触ったことない人間です
以下の内容ってVBAで実行可能でしょうか?
できるなら独学で地道にやってみようかなと思っていまして…
■現状
サイトから売上データをDLし、指定のシートにコピペ×10サイトほど
■やりたいこと概要
データDLだけでも自動化したい
■やりたいこと詳細
1.サイトにログインする(ID・パスを入力)
2.必要項目をプルダウンやチェックボックスから選び、CSVダウンロードボタンを押してデータをフォルダに格納する(あるいはVBAとおなじエクセル内にシート別でコピペ)
できるかできないかだけでも教えていただけませんか…? VBAってメインのシステムを補って、カバーしきれなかった隙間を埋めるものっていう認識があるわ
おれが作ったプログラムで一番重宝されてるのが
メインのシステムを使うに当たってミスした場合、数百の修正を手作業で一時間以上かけて
しなければならなかったものを10分程度で終わらすことができるようにしたものだわ
メインのシステムは本社レベルで作られているものだから俺のいる地方支店ごときが
口出しできるようなものじゃない
でもVBA使えば工夫次第で補正できる >>744
先を見て他の事を学べって事だよ。ずっとこの処理方法なんでとか言ってるアホなお局と同じだぞ。 >>745
出来るよ。PythonとかJavaScriptでも出来るし、RPAならもっと簡単に出来る。VBAでマクロ作るのに2時間かかるとしたら、RPAならそのマクロなら10分で組める。 >>748
10分!?プログラミングできる人って本当にすごい…
RPAちょっとググってみる
ありがとう! >>745
出来るけど、出来ると思ってるのが凄い。
VBA触ったことない人は、そもそもエクセルでエクセル以外のものを動かせるとは思わない。 Ruby, Selenium WebDriver で、Chrome などのブラウザを自動操作すれば?
漏れは、下のように、yahoo とか、あちこちにログインしてる
driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym"
driver.manage.window.maximize # 画面最大
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 # ボタンを押す >>748
VBAでも10分位で出来るけどな。
まあ、オブジェクトまでのツリーを取得する自作ツールが有るからなんだが。 >>753
何で余計なもんをインストールする必要のあるもんを勧めるんだよ。 Excel, VBScript, PowerShell などで、IE を自動操作できたっけ?
そもそも漏れは、有料のExcel を持ってないからw 何でこのスレに居るの?
そしてIEの操作にExcelは関係無いよ? >>757
いつの時代から来たんだ?
まあ、常に初心者はいるんだが、初心者がだっけとは言わないだろうw 仮に専用の関数が無かったとしても、
最悪、SendKeysでどうにかなりそうだが。 VBSだけでInternetExplorer.Applicationからかなりの事ができる
ただしIEに対応してないサイトでは使えないので今からやるならpythonとか使った方が良い
それとExcelとは何の関係もない 1と2行目の間に新たに行を挿入し、
そこに別のセルからデータを貼り付ける。
という作業を行いたいです。
相対的に記録することによって、
作業したい行の1列目のセルを選択した状態でマクロを実行すると望む動作ができるマクロを作れました。
これを1から2000行目くらいまで繰り返したいです。
現状は、
1行目を選択してマクロ実行、
3行目(間に行を入れたので、元2行目です)を選択してマクロ実行、
と手動でやるしかない状態です
よろしくお願いします 2000行あって、その全ての行間に1行ずつ挿入(データ貼り付け)?
上からじゃなくて下からやっていけば行番号ずれない
具体的には・・・・↓ 「1から2000行目くらいまで」
こういう書き方しかできない頭の出来を治せばできるよ カーソル下に二つ動かすとこまでマクロ記録すればいい PDFから文字を抽出する時、
PDTextSelect.GetTextだと文字化けすることがあるんだけど、
文字化けしない方法ない?
素直にWordかExcelに変換しろよって思うだろうけど、
レイアウトがアホたみいなPDFなので、
AcroExCh.HiliteListで座標を調べながら抽出したい。 >>768
エンコーディングに問題があるために正常に文字列として抽出できない状態です。
PDF変換をOS XのQuartz経由で行っているのが原因でしょう。
画像に変換してからテキスト抽出するのがいいでしょう。 そんな事をVBAでする必要ある?
お前らが良く言う適材適所はどうなった? >>769
いや、書式ごとコピーすれば文字化けしないから、
取り出し方の問題だと思ってる。
>>770
何ならいいの?
会社のだから、好き勝手インストールできないので、
VBA、VBS、JSくらいしか選択肢無いんだけど。 Acrobat入れて貰えるならもうちょっと頑張ろうぜ Acrobatってphotoshopみたいにjs使えなかったっけ
VBAでPDFはしんどいだろう Excelに落とし込むならVBA。事務の現場ではでjsをメンテできる人は少ないから会社では使えない。
VBAでやる必要があるかというよりも、システムに頼むと金も時間もかかるし、環境的にExcelしか使う方法がないという感じだよ。 >>764
その望む動作をするマクロをforで指定行まで2行ごとに繰り返す >>773
使える。
というか、実際VBAだけじゃきついので、VBAの中で使ってるわ。
tmp = "var tmp = ○○○"みたいな、変な書き方になるけど。 >>776
evalみたいに使っているのね
それが正解だと思う Excel VBAだけでDBの構築って出来ますか?出来るとしたらどんな方法がありますか? ないよ
たった行列が10億だか100億程度で上限があるから あ、そういう質問なの?
てっきりOracleとかMySQLのインストールやセットアップ、テーブルセッティングをキーストロークとかで自動化したいって話だと思った >>779
まるでDBサーバには制限がないみたいな物言いだな Excel 2007/2010で不思議な現象に出くわしています
以下のコードを標準モジュールに書きます
Sub main()
Cells(1, 1).Interior.Color = vbRed
End Sub
Alt + F8で「main」マクロを実行すると「A1セル」が赤色に塗られます
ところが
function main()
Cells(1, 1).Interior.Color = vbRed
main = ""
End function
このような関数を作り、ワークシート内で使用すると
「#VALUE!」が戻ってきてA1セルも赤色に塗られません。
「Cells(1, 1).Interior.Color = vbRed」の箇所をコメントアウトすると関数は正常に動作します
Functionプロシージャ内部ではセルの背景色を変えるなどの処理は出来ないのでしょうか? 初心者で申し訳ないんですけど、Excelだけだとシートにテーブルを作って、VBA でデータ入力したり、更新したりするってことなのかな
DBっていうとAccessとか使うしかないってこと? DBってなんの話ししてるかまじでわからん
エクセルをデータベースのように使いたいって話し? >>785
入力とかシート上でできることはわざわざVBAでしなくてもいいんじゃないの、入力フォームが欲しいとか言うんでなければ 複雑なデータ抽出とか更新処理はVBAでやらないと大変なんじゃないかね adodbやadox使えばaccess買わなくてもmdb使えるし
MS-SQLExpressなんかもタダで使える >>790
ありがとうございます!これのことだと思います。調べてみます >>784
その通り、ワークシートから呼び出された関数からは別のセルは加工できない仕様になってる >>784
状態変える処理やるとそこで強制終了するね
エラーでキャッチもできないし Excel以外は会社の縛りで入れちゃダメって設定だったろ? >>792-793
Cells(1, 1).Interior.Color = vbRed を
Cells(1, 1).Font.Color = vbRed
にすればちゃんと動くんだがなあ
残念 >>794
普通はAccessも入ってるもんだが。 >>796
実施後にセルの色を変える処理を呼び出せば少し高度だけど可能。
SetTimerを使う。 DBと言われてaccessだと思う人って少ないよね >>800
でしょうね
でも、DBのフロントエンドなら私としては断然ACCESS
office365に移行した会社増えてるみたいだから、実は使えるようになってますって人もいるんじゃないかな そしてデフォルトで使ってうっかり誤操作してデータ壊すまでが洗礼
トランザクションとは >>802
エンジンはWindowsに標準で入っているから
メモ帳があれば使えるDBだし DBがOS標準で入ってるのは知ってるんだけど
じゃあaccessって何のために存在しているの フォーム、レポート、クエリーエディタ
データシートビューでも連結テーブル表示できるし
Excelと違って型チェックする必要ないから楽だぞ > Cells(1, 1).Interior.Color = vbRed を
>
> Cells(1, 1).Font.Color = vbRed
>
> にすればちゃんと動くんだがなあ
と書いたが、Excel2007だとダメだな
やっぱFunctionプロシージャ内でセルの状態を変化させるのはご法度ということか
>>798
SetTimer調べてみたけど想像も付かん
良ければ教えて下さい >>796
>>798
どういうこと?
具体的な例をにfunctionから貼ってくれ 相互参照をアクティブにする方法はどうしますか?
book1でbook2のとあるセルの値を取得、
book1でその値を元に計算した結果のセルをbook2で参照して取得したいです。
両方のブックを開いてるとリアルタイムで連動しますがbook1を閉じるとbook2が連動しなくなってしまいます。
何とかしてbook2だけ開いてても動くにはどうすればよいですか。 csvから特定のカラムを取得してレポート用資料作成をしたいです
それぞれ値を取る際にFormatしたり、キーを取って別シートを参照して値取ったりしてますここらへんをfunctionで纏めて呼び出し元に返したいのですが、複数の意味ある値を返す際どういった形式にするのが良いのでしょうか
リストだと煩雑すぎますし利用する際に中のデータ構造を正しく理解する必要があるので辛いです >>810-811
ちょっと余計なことを言ったかなと反省している。
SetTimerは使い方を間違えるととても危険なので、
仕組みが分からない人は使わないほうが良い。
Private Declare Function SetTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long
Private rngTarget As Range
Public Function main()
Dim hWnd As Long
hWnd = Application.hWnd
Set rngTarget = ActiveCell
Call SetTimer(hWnd, 1, 100, AddressOf TimerProc)
End Function
Private Function TimerProc _
(ByVal hWnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Select Case wParam
Case 1
rngTarget.Value = ""
rngTarget.Interior.Color = vbRed
Call KillTimer(hWnd, 1)
End Select
End Function >>815
おお素晴らしい
質問ですがTimerProcの引数はどこから渡されてるのでしょう?
ネットのサンプル見ると引数なしにしてるのが多いようですが >>817
相互参照だから開いてない方のbookの値が更新されないんです
【book1】
A1=book2.A1
A2=A1*2
【book2】
A1=1
A2=book1.A2
こんな感じになってて、book2だけ開いてる状態でA1を2にしたらA2が4になるようにしたいです。 片方のbook開いたら他方のbookも裏で開くようにするしか VBAは奥が深くて面白いね
でもすでに同じ構文のVB6が終了して19年
いつまでExcel VBAは前世紀の言語仕様で戦い続けるんだろうね 西暦2100年 そこにはいまだにVBA を書く社畜の姿が >>819
こんな感じにデータベースファイルみたいなのが100個くらいのbookに分かれてるんですよね
それを1個のbookで参照・集計してアナライズしたいんですけど
自分で書いててアレなんですけどやっぱ明らかにexcelでやることじゃないんですよねーwwもうどうしようかしらん >>820
デカくて潰せない会社と同じ
批判はあっても存続
他言語導入でも併存
他言語になっても、新たに覚え直す程の魅力がなければワザワザ移行しない
そんな言語があるとも思えない もう既に基本的なことはpythonのopenpyxlで叩く方が楽だけどなw >>818
まず、kore互いに参照し合う構成にすること自体が間違ってる
book2のA2はbook2のA1*2でいいんじゃないのか Excelは互いに参照し合う構成にすること自体が間違ってる >>827
book1に1日目のりんごとみかんの売り上げ個数が書いてある
book2に2日目のりんごとみかんの売り上げ個数が書いてある
book3で1日目と2日目のりんごとみかんの売り上げを表示したい、またbook3で書く売り上げに用いる消費税というパラメータを定義してある
こんな構成の時ってどうすればいいの?
今はbook1とbook2でbook3の消費税パラメータを参照して計算して、book3で計算結果を吸い上げてる 横からだが、その構成途中で値上がりしたときにやばくないか? >>828
book3が最終形態ならbook1とbook2から個数を参照してbook3で料金計算 >>829
例えなので、実際は単価が上がることはなく、種類は100種類程度のデータです。
book3で全日付のデータ吸い上げて1日の売り上げ個数をbook3の別シートに仮保存して計算というのもしましたが、
日数分だけシートが増えてくので、。
欲しいのは売り上げ金額だけなので、無駄なデータは増やしたくないのですが・・ >>831
なら尚更構成見直した方がいいと思う
なんであっち見たりこっち見たりするんだ… 教えてください
ctrl+cでセルを値でコピーするのと同時に、セルか文字に色をつけたいのですがなかなか作れません
ヒントあれば教えて下さい >>834
いえ、コピーしたセルがわかるように色付けしたいです >>833
マクロを
・色付
・コピー
にしてショートカットに登録
ctrl+cではなくそのショートカットでコピーする >>832
どう見直しても解決出来そうになくて・・
そんなに特殊ケースでもないと思うのですが、世間の人々はどんな構造にしてるのでしょうか。 >>836
ありがとうございます。
ctrl+cでやるのは無理なんですか? >>838
作ったマクロを ctrl+cに割り当ててみ >>837
日報と同じファイルに単価とか共通の固定データ用のシートを1個作る
日報がどんなレイアウトか知らないが↓みたいなのと仮定する
8/1 8/2…
りんご
みかん
sumifで1日分の個数を取得×Vlookupで単価取得
個数のファイル名はyyyymmddとかにして数式コピペできるようにしとく コピーはCtrl+Cだけとは限らないからクリップボードを監視して
対象のシートがアクティブな間に状態が変わったら選択セルに色を付けるだけ
個人で使うだけなら適当でいいんじゃないの Ctrl+Cでやりたいと言ってるんだから面倒なことしなくていいと思うが A1を始点に行方向に5,列方向に4の間隔で格子状に存在するセルの先頭の文字だけを赤くしたいのですがどうやれば可能ですか? >>846
Sub Macro1()
For r = 1 To 100 Step 5
For c = 1 To 100 Step 4
Cells(r, c).Characters(Start:=1, Length:=1).Font.Color = vbRed
Next c, r
End Sub 今日、Excelの表で手動でソートしてたら変な挙動が現れ、原因が分からず困ってしまい…
まず、「状況」列に、「完走」と「未達成」のデータがあるのですが、
この列を昇順ソートすると、「未達成」の上と下に「完走」が分かれてしまいました
もちろん降順ソートも同様です
で、この上下の「完走」を別のシートにコピペで貼り、挙動をチェックしてみましたが…
https://i.imgur.com/FXwnn0h.jpg
上のリンクでも書いていますが、文字自体はif文でもフィルターでも同一扱いです
(ソートの時だけ、なぜか違いが出ています)
思い当たる違いは入力の仕方で、手打ちしたものとマクロ(VBA)で入力した違いがあります
マクロを作って以降はマクロで入力してますが、それ以前のデータは手打ち&コピペで入力しました
とりあえずの対処法として、マクロで入力した文字を全てにコピペすればこの問題は解決しますが
今後のこともあり、なにか見落としている点や抜本的な対策がないか、
何かアドバイスを頂ければと思い質問しました。
なお、これは仕事とかじゃなくて趣味でやってるものです
あと、使ってるのは Excel2007 で、ちょっと古いバージョンです
以上、よろしくお願いします >>850
大を「おおきい」で変換するか「だい」で変換するかで位置が変わるのと同じやね
う
え
大 (おお)
か
き
大 (だい) ふりがなは集計とかで計算が合わない原因の1つ
非常にヤバイ あ、勝手に2回書き込まれた。
2回押したわけじゃない。(時間が同じ) 同時にマルチポストするスクリプトのテストなんでしょ?わたししってます utf8でテキストファイルを読み書きするにはADODB.Stream使うしか無いんですか? >>860
テキスト取り込み機能の、文字コードの選択肢に、
普通にUTF-8入ってるけど。 >>863
データ → テキストまたはCSVから → テキストファイル選択 → インポート → 元のファイル「65001:Unicode (UTF-8)」
バージョンによって、多少表記は違うと思うけど。 >>864
ありがと、試してみる。
utf8でファイルへ書き出す方法はある?
ADODB.Stream以外で。 >>865
なぜDODB.Streamを避ける?参照設定ならVBAで追加できるぞ >>866
ゴメン、それをここで議論するつもりは無いんだ。
utf8でテキストファイルを読み書きするにはADODB.Stream使うしか無いのか知りたいだけ。 言い直す。
utf8でテキストファイルを読み書きするのにADODB.Stream以外の方法があれば知りたい。 言い直す。
utf8でテキストファイルを読み書きするのにADODB.Stream以外の方法があれば知りたい。 どんな方法でもいいのなら、文字コード変換プロシージャを自作すればいい
変換テーブルはネットに落ちてる >>868
APIで変換できる
ADODB.streamも内部では同じAPIを呼んでるはず
http://www.t-net.ne.jp/~cyfis/win_api/sdk/MultiByteToWideChar.html .netのライブラリ呼び出すとか?
ADODBを避けたい理由がわからんけど 違う視点で調べてみるとか、
UTF-8じゃなくて、中国語をどうにかしたい、とかさ。 >>868
方法はいくつもある
無料のWebAPIもあるし、コマンドラインでnkfを呼び出したり、テキストボックスのプロパティをいじったり
あとは理由、目的、条件などをはっきりさせてくれないと話の続けようがない 参照とかAPIとか事務のおばちゃんには難しいのでは?
VBAを使う理由って何もさせてくれない設定だったよね? 何設定って
ぼく働いたことないから実態わかりませんてこと? ・2列の一致する組み合わせを数える方法(ex.A列に野菜B列に果物が書かれている時AがトマトかつBがりんごの行をカウントしたい)
・数式の結果の文字の先頭を色付けする方法(ex.A1セルに【=IF(条件式,"☆優先","▽後回し")】が入力されていてその結果の文字の先頭の記号だけを色付けしたい)
この2つのやり方教えてください。 >>879
対象範囲をForで回して評価します。
式で表現されたセルの部分文字列の書式を違えることは出来ないんじゃ? >>879
最初の方は何をしたいのか意味が分からない。
トマトが野菜かどうかはどうやって判定するの?
2番目の方は数式の結果はそのセルのValueで取れるから数式関係無くね?
VBAでやりたいのか数式でやりたいのかも不明。 for each c in [a2:a20]
if c.value & c.offset(,1).value ="トマトりんご" then cnt =cnt + 1
next
msgbox "うんこ" トマトは野菜だがフルーツトマトはフルーツである。○か×か? >>881
このスレにわざわざ書き込んでるんだからさすがにVBAでやりたいんだろうと思うけど。 >>879
一つ目は数式でできるがVBAでないと駄目なのか? 質問ですが、ExcelのワークシートとVBAとでは、日付の扱い(起点?)が異なるのでしょうか?
例えば、数字の「5」をDate型で表示すると、
・ワークシート: 1900/01/05
・VBA : 1900/01/04
https://i.imgur.com/8Iq99R4.jpg
このように1日ズレますが、これはどういう事なのか…、これで合ってるのでしょうか?
(Excelのバージョンは2007です)
何かアドバイスを頂けると幸いです https://www.tipsfound.com/vba/05cdate
CDate
値に数値を指定したときは、日付型の初期値 1899/12/30 0:0:0 にその数値の日を足した日付に変換します
https://www.officepro.jp/excelfunc/date/index0.html
日付のシリアル値は、1900年1月1日が基準日となりシリアル値は「1」となります。
らしいぞ >>892
ソースのリンク先まで貼って頂き、ありがとうございます。
シリアル値の「1」を日付で表示した場合、やはりワークシートとVBAで起点が1日ズレてるんですね
「期限の5日前までのものを抽出する」って操作をワークシートでやってたのですが
これをVBAに置き換えたら何か結果が変で…、しばらく変だったことにも気付かず…
とりあえず、そういうものと思って注意して使うしかないですね
しかし>>848のソートもだけど、いろいろ思いがけないことがあるもんですね 勤務表の作成の相談です。
以前も少しさせていただいたのですが、下記の条件で作ることは可能ですか?
1月の勤務時間160時間 週40時間
週休2日
月に1度は2連休を入れる
勤務形態の組み合わせは2種類
(1)昼8、昼12、遅8、夜12
(2)昼8、遅8、夕8、夜8
夜12、夜8の次の日は休みで無くてはいけない
昼12.遅8の次の日は昼8、昼12を入れてはいけない
勤務の希望や休みの希望は必ずその通りにしなくてはいけない
経験年数によって行える業務も違うため、どの日も均等に業務ができるように組まなくてはいけない
業務内容は☆、△、□、◇、●の5種類 >>894
質問は可能かということだから答えるけど可能
コード晒せとか言うのであれば
長くなるのでここでは不向き
どんな形態の勤務表作るのかは知らないけど
ボタン押して勤務表の記載内容をチェックして
ダメならメッセージボックスでその旨表示して
ダメなセルを着色かなんかするようなイメージ? 盆正月GW諸々考慮しないでいいのか心配になる内容
完成してからの修正が本番になる予感 879
すいません、一つ目はcountfsでやれました。
2つ目が出来ません
直接、☆優先、とだけ文字を書いたところなら先頭だけ赤くできますが計算結果の文字の一部を赤くするにはどうすればいいですか?
関数でもVBAでも何でもいいです。openpyxlでも。 Range("A1").Characters(Start:=1,Length:=1).Font.ColorIndex = 3 >>898
これは俺が悪かった。
数式に対してはセル内文字列の一部分に対して書式の設定は出来ないようだ。
条件付き書式で出来るかと思ったけど、条件付き書式もセル内文字の一部分に適用出来ない。
つまり、出来ないと思う。 >>895
勤務、休み希望を先に選択し残りの空白部分は自動で組めるようにしたいです。 判定や入力もVBAでやってRange.caractors(1,1)から変えればいいじゃん >>904
直接数式の入ったセルに対してやりたいんだろ。 数式の入ったセルにRange.caractors(1,1)で書式変更しても反映されない。 >>903
自動部分のパターンが明確に決まってるなら出来るよ フツーに行単位でセルの色を変えた方が見やすいんじゃないの >>909
自動で勤務の振り分けをしたいんじゃないのか? (ほぼ)リアルタイムに状況見ながら各自が休みとか入れさせるのか、単に休みの希望だけオフラインで集めて、スケジュール担当者だけがシステム触るのかでも難易度が全然違う
今時やるなら前者で行ってもらいたいものだが、仕様考えながら完成まで一ヶ月でできるかも怪しい気がする 先頭の記号一文字分だけ色をつける仕様が糞仕様だと気付くことが必要だよな いやでも実際文字全体をカラーにされると読みづらいから先頭の色付記号だけでアテンション引いてくれる方が見やすくてデザイン性は高いよ 俺はセル内改行された文字列のセル内1行目だけを
フォント大きめで色を付けて強調させるマクロをよくつかう それでも直接文字列でしょ?
IFで選択した文字列に使えないのが雑魚すぎる
VBAマジでアップデートしないかなぁ
今時continueするためにラベル+gotoが必要とかマジでお笑いだわ >>911
そうです。条件に合う勤務表を自動で作成したいです
>>913
オフラインで休み希望等を確認し担当者が入力。あとは、自動作成というのを作りたいです。 >>919
たぶん既に作ってる表は、一ヶ月分が1シートで横方向がその月の日、縦が氏名。その下に☆△等の個数な感じかな。
賢明なら、月初と月末にかかる一週間もそのシートに含めてあるか…(含めてないなら含めておくとプログラミングが楽になる)
対象が何人かわからないけど、条件を満たす候補が何十(百)もあるときどうするのか
そうなるなら、休み希望だけでなく出勤希望も可能とする。そうすると連休よりバラしたい人は休みの前後に出勤希望を入れればいい
プログラム的には、休みや出勤を本人希望か自動設定かを区別しておくこと(見た目でも)
あとは、粛々と仕様のロジックを組み込むだけかな
学校の時間割り作るのと似てるので、そっちで検索すると参考なることあると思う >>919
他には、氏名ごとに日のあとに、2連休有無、各週、月の勤務時間なども出しておきたい
まず作るのは、仕様に合った勤務割り振りになってるかチェックするプログラム
それができていれば、自動割り振りできてなくても手作業で始められるし、できたとこから随時自動化を進めていける
仕様へのリンクメモ >>894 >>918
ある程度仕方無いけど、数式とVBAは混在しない方が良い。 素直に条件書式アイコンセット使った方がいいんじゃね セルにシェイプやフォームを重ねてそっちに色を付ける
別シートに値コピーして、そこに色を付ける 数式列を隠しにして横に値持ってきて色付ければいいんじゃないの?
どうせVBAで色付けるんでしょ? 昨日まで動いていたREPLACE関数が仕事しないんだけどおま環? >経験年数によって行える業務も違うため、どの日も均等に業務ができるように組まなくてはいけない
悩みどころがあるとすればこの均等な業務とやらが明確に決まっているかどうかだな >>933
マクロ無効になってるとか式に問題があるとか 再起動して当該部のマクロ記述しなおしたら直った
原因はようわからんかったが >>937
どういう風に仕事しないのか分からんが、エラーになってデバックでREPLACEが黄色になってるんだったら参照設定が壊れて、基本関数でさえ参照出来なくなる事例かな。
LEFTとかCSTRとか当たり前に使える筈のものが使えなくなった時は一番最初に疑う。 素直にVBAで計算しな。
そしたらTextオブジェクトにもアクセスできる。式の部分文字列には色付けられないって、最初に言ったろ? ワークシート関数で評価した結果をセルに書き込んでから書式変えるのが一番良いよ 勤務表作成のコードが分かりません。
どのセルにどのようなコードを入れればいいですか? >>945
エスパーじゃないので何がどう分からないのかすら分からない
全部分からないってパターンなら正直ここでは解決しないと思う >>946
>>894
>>947
シートを2枚作成し
1枚目(勤務表)
A列に名前
仮に20人所属としA列2行目〜A列21行まで名前を入力
B列〜AFまでに日付
2枚目(参照)
勤務形態
ABC列にそれぞれの勤務形態のグループ(元々仕様では2種だったが、3種必要だった)
A列:昼8、昼12、遅8、夜12
B列:昼8、遅8、夕8、夜8
C列:昼8、遅8、夕8
A列に名前B〜J列10行目にそれぞれの行える業務について
A列の名前を入れ、B〜J列10行目に業務項目を入力し11行目以降にそれぞれの行える業務については○を入力しその情報を元に
勤務表の(B2:AF21)に勤務を表示させたいのですが、(B2:AF21)それぞれにコードを入力すれば良いのでしょうか?
また、どのようなコードを入力すれば良いのですか? CSVからxlsmに一括変換するコードがネットに落ちてない…わかる人いますか? >>948
スマンがヒント下さいって程度の話なら答えられると思うけど
やり方全部分かりません全部教えて下さいって話だと他所を当たった方が良いよ >>950
なぜCSVを、xlsmに?
なにをさせたいのかよくわからん。 >>948
VBAはセルではななくコードエディターに入力して動かすもの csvを列幅自動調整してxlsxに一括変換するやつなら作ったことあるけど CSVそのままだと数字しかない列を数字と読んじゃうからイマイチなんだけど
0001とか1になってまうやつね
そういうのうまく文字列として読む方法ないですかVBAで >>960
Excelで開いて上書き保存するとセルの値がそう書き換えられる仕様だったような。 >>960
普通はExcelで開かない。
テキストとして開く。
で、独自処理。 >>960
エクセルCSVデータが勝手に変わるのを防ぐ 文字列読み込み法
https://www.excelspeedup.com/csvmojiretsu/
『1 csvファイルをそのままの形で取り込む3つの方法
1.1 「外部データの取り込み」を使って取り込む
1.2 拡張子を「.txt」に変更して開く
1.3 テキストエディタで開きエクセルにコピー貼り付け』 どんな形で開いても書式設定を文字列にするか頭に ' 付けなきゃ0消えた気がするが いや、VBAでテキストファイルならOpen、Line Input使うとかFileSystemObject使うとかでしょ。 文字列として読み込めば0は消えない
あとLineInputよりクエリのがずっと速い
サンプル
Sub CSVread()
With Worksheets("Sheet1") '読み込むシート
With .QueryTables.Add(Connection:="TEXT;C:\tmp\test.csv", Destination:=.Range("A1")) 'ファイル名とセル位置
.TextFilePlatform = 932 '文字コード指定
.TextFileCommaDelimiter = True 'カンマ区切り指定
.RefreshStyle = xlOverwriteCells 'セルに上書き
.TextFileColumnDataTypes = Array(xlTextFormat, xlTextFormat, xlTextFormat) '各列を文字列に指定
.Refresh 'シートに読み込んで表示
.Delete 'クエリを切断
End With
End With
End Sub csvやjsonのような構造化されたデータの読み書きならLineInputよりクエリかな >>967
LineInputもクエリも表示形式設定しなきゃ文字列として扱ってくれないと思うんだが、そうでない読み込み方があるなら教えてほしい schema.ini書いてADOでいいよ、そんなもん。 >>967
これだとUTF8で読み込めるんだなー
ありがと VBA出来る人はSQLも普通に使える人が多いのでしょうか? >>972
ACCESS VBAを使ってる人なら多いと思うがExcelはそれほどでもない >>977
使える人もいるが、VBAerはSQLや他のプログラミング言語の知識がなく他の選択肢を持たない極めて低スキルな層が大多数を占める 世の中にはSQLが書ければコマンド一発でできることをVBAで猿のようにループ回してる糞コードが山ほどあることを考えると決して無関係ではない
無関係と思いこむことで自らの無能を正当化するのはやめなさい だれもSQLとVBAが無関係とか言ってないのに何を言ってるんだよ…
VBAが使える人とSQLが使える人の話な イメージは975
excel から逃れられないひとが使うイメージ スレチで申し訳ないがM言語を使える人ってどれくらいいるんかね
上司の謎采配でDB導入に待ったがかかってるからExcelでPowerQueryを組んでるんだが誰にも引き継ぎ出来なくなりそうで怖い VBAよりSQLの方が簡単だからSQL覚えておくと良いと思う。
SQLはどう使うかで難しくなるけど。 >>983
M言語は全く分からん。
やってみても良いんじゃない?
様子見もありだけど。 ExcelのM言語ってMUIMPSのことなの? それとも全くの別物? どうしても今すぐ仕事で使いたく、無知なまま質問することをお許し下さい。
ワンクリックでセルに色が付き(塗りつぶし)、色を付けたところを再度クリック(こちらはダブルクリックが理想)すると元に戻る(白くなる)ようにしたいです。
知恵袋で近い回答を見つけたのですが範囲の指定方法が分からず。ただ、こちらは白に戻すのをワンクリックで行うため理想とは若干異なります。一応載せておきます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub '※1
Select Case Target.Interior.ColorIndex
Case Is = xlNone
Target.Interior.ColorIndex = 3 '※2
Case Else
Target.Interior.ColorIndex = xlNone
End Select
End Sub
※1:数字の 1 はA列を意味します。C列なら 3 です。
※2:数字の 3 は赤で、4=緑、5=青、6=黄、7=ピンク、8=水色、です。
難しくなってしまうようでしたら元に戻す動作もワンクリックで大丈夫です。ご教示頂けると嬉しいです。 >>972
高速化について調べていったら、最終的に行き着くのがSQLって感じ。
あとは、会社のPCにAccessが入ってないとか。 >>989
SelectionChangeは選択範囲を変更した場合のイベントだね
BeforeDoubleClickに変えればいいんじゃない >>991
ありがとうございます。beforedoubleclickに変更すると範囲指定できるようになるのでしょうか?このコードだと 1 と入力されているところが範囲指定の部分だと理解しているのですが、例えば("A1:C5")と入れてもエラーになってしまって、、 >>993
ならこれだ。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call changeCellColor(0, Target) '0は空白色を指します。
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call changeCellColor(3, Target) 'ColorIndexに対応。3=赤、4=緑、5=青, 6=黄など。
End Sub
Private Sub changeCellColor(IndexCode As Long, Target As Excel.Range)
Dim LimitedRange As Excel.Range
Set LimitedRange = Target.Worksheet.Range("A1:E10") 'A1:E10のセル範囲み動作するが、変更を。
If Not Excel.Application.Intersect(Target, LimitedRange) Is Nothing Then
Target.Interior.ColorIndex = IndexCode
End If
End Sub >>993
ちなみに元のコードは、選択セルが1行目でなければ変更、という意味になるんで座標入れてもNG.
座標で効果範囲を制限したい、ってちゃんと言っといた方がよかったね。 >>994
すごい…作ってくださりありがとうございます!!
今手元にパソコンがないので明後日職場で試してみます。お時間を割いて頂きありがとうございました! >>995
なるほど…そういう意味だったのですね!ご親切にありがとうございます! 間違えた。元のコードは選択セルが1「列」目でなければ変更。
あとこれ、ドラッグ選択すると制限外セルの色まで変わっちゃうな。問題あれば
Target.Interior.ColorIndex = IndexCode を
Excel.Application.Intersect(Target, LimitedRange).Interior.ColorIndex = IndexCode に変えといて >>998
了解しました!どうもありがとうございます♪ 意味もわからずネットで見つけたコードを使う馬鹿の作ったVBA このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 83日 20時間 11分 0秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。