X



Excel VBA 質問スレ Part62

レス数が1000を超えています。これ以上書き込みはできません。
0001
垢版 |
2019/06/24(月) 00:21:37.48
!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
0005デフォルトの名無しさん
垢版 |
2019/06/24(月) 15:03:11.87
令和初か
0008デフォルトの名無しさん (スッップ Sdb3-tfaa)
垢版 |
2019/06/26(水) 18:24:48.22ID:0wa1QMM+d
オートフィルターで抽出条件を変数にして繰り返し処理で1ずつ加算していくことは出来ませんか?
下記では出来ませんでした。

For i = 1 to 10
Range("A1").AutoFilter _
Field:=2, Criteria1:="i"
next
0012デフォルトの名無しさん (ワッチョイ a1da-Im5L)
垢版 |
2019/06/26(水) 23:33:00.96ID:HbMJ8lDB0
中二病みたいな感じにしたらこうかな?

┌→ FoR Z = 1 ─┐
│           └→ 10
│ RANgE("A1").AutoF F = 2, C = Z
│        │
└┐       │
  └ NExT   │
          ↓
          ×
0016デフォルトの名無しさん (ワッチョイ d602-/vdH)
垢版 |
2019/06/27(木) 19:55:21.93ID:M8DBqUMl0
VBAができるようになると、xlsmのファイルの中には、普通のワークブック関数って使ったりしないんですか?

例えば、セルの値を別のセルに入れたりとか、if関数とか、簡単なものも
全部 VBAで書いたりするんですか??

それとも混在するんですかね??
0018デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/27(木) 20:02:49.59ID:JZwmukYw0
>>16
処理の内容によって関数の方が良い場合とVBAの方が良い場合がある。
だから内容次第。
混在もあり得る。

でもVBAメインで考えてる時は関数のことは忘れがちで全部VBAにしてしまうことも多い。
あと、自分が組む場合はそもそも関数じゃ無理な処理が多い。
0020デフォルトの名無しさん (ワッチョイ 5dda-bYGp)
垢版 |
2019/06/27(木) 23:03:15.57ID:It0Wr+rk0
>>16
しない。
VBAが出来るようになると、発想自体が変わるから。
手で数字を入れて、計算式で答えを出す、みたいな使い方にならなくなる。

コマンドボタンを押すと、Webとかデータベースから自動で情報を探してきて、
シートに必要な答えだけを表示するとか、そんな使い方になる。
0021デフォルトの名無しさん (ワッチョイ 3e8c-zD22)
垢版 |
2019/06/27(木) 23:08:08.30ID:T3xK78tz0
>>16
ワークシート関数の方が100倍早いからできないことだけVBAを使う
0023デフォルトの名無しさん (ワッチョイ 3e8c-zD22)
垢版 |
2019/06/27(木) 23:52:45.12ID:T3xK78tz0
超初心者へのアドバイスなんだからザックリでいいんだよ
0027デフォルトの名無しさん (スプッッ Sdea-mW/F)
垢版 |
2019/06/28(金) 09:29:37.11ID:jtjZs4Dcd
そうすると関数とVBAの2つを覚える必要があるからVBAで出来るならBBAでやるのが簡単
0032デフォルトの名無しさん (ワッチョイ a1ce-bYGp)
垢版 |
2019/06/28(金) 13:05:33.48ID:Ug9PnKsO0
式が長くなったり作業列がいくつも必要になるような処理はVBAだわ
深いネストとか配列数式とか使うのもいいけど、ワークシート関数だけにこだわると、見通しや保守性が悪くなることもあるし

地味に厄介なのが条件付き書式
これも他人が作ったのを保守すると地獄を見ることになる
0035デフォルトの名無しさん (ドコグロ MM9d-BSeC)
垢版 |
2019/06/28(金) 19:13:18.48ID:7K6czL1cM
>>32
> 地味に厄介なのが条件付き書式
> これも他人が作ったのを保守すると地獄を見ることになる
頑張ってA1:A10に設定したのに次に見たらA1:A3,A4,A5:A7,A8:A9,A10に分割されてたり
マージしろとまでは言わないけど設定した奴を崩すなよ…
0041デフォルトの名無しさん (ワッチョイ 8932-uKxa)
垢版 |
2019/06/29(土) 00:26:23.28ID:n02ql8lh0
ちょっとニッチな質問失礼します。

バーコードによる品物管理のvbaの検討中です。

バーコードをスキャンした際に、数字に交じって、
グループセパレータ(GS) Asciiコード(0x1d)が出力されるタイプのバーコードを
スキャンした際、文字として存在しない、Ascii 0x1dが入力されたことを検知する術は
何かあるでしょうか。

スキャンしたデータは例えば、0000(0x1d)1234という形でスキャナから飛んできてるはずなのですが、
エクセル上の表記は、当然ながら00001234となってしまいます。

飛んでくる文字のasciiコードを逐一キャッチできれば、0x1dを検知できるかと思うのですが、
vbaでそんなこと可能でしょうか。
0049デフォルトの名無しさん (ワッチョイ fe68-bYGp)
垢版 |
2019/06/29(土) 08:41:34.78ID:ar/F9wgf0
スマホアプリ使ってるな
COGNEXのSCANNERってやつ

>>41
2つに分けたほうが良いと思う
・バーコードスキャン、文字をセルに入力
・入力したセルに対してvbaでfindか何かで検知。changeイベントになると思う
0052デフォルトの名無しさん (ワッチョイ 8663-Ij2G)
垢版 |
2019/06/29(土) 12:33:19.42ID:18j8PEbp0
>>30
拡張子が.xlsmだったからどんなコードが書かれてるのかと
エディタ開いて見てみたらModule1, Module2, Module3と並んでて
全部、なんもコード書かれてなく、各SheetやWorkbookにも全くコードが書かれてなかったわ
0054デフォルトの名無しさん (ワッチョイ 15b3-H8Xf)
垢版 |
2019/06/29(土) 13:46:07.80ID:5z81DYWR0
ここ数週間、入門本とかサイトとか見ながら勉強して、
渾身のコードができたんだけど、誰か批評してくれるかい??


脱初級者になったか見て、アドバイス欲しいんだけど…
0057デフォルトの名無しさん (ワッチョイ 15b3-H8Xf)
垢版 |
2019/06/29(土) 14:11:28.01ID:5z81DYWR0
>>55
なるほど。。。

>>56
ありがとうございます。
ちょっと長すぎて書き込みエラーになりました

分割して貼ります
0058デフォルトの名無しさん (ワッチョイ 15b3-9NVx)
垢版 |
2019/06/29(土) 14:12:40.80ID:5z81DYWR0
お願いします・・・




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")
0059デフォルトの名無しさん (ワッチョイ 15b3-9NVx)
垢版 |
2019/06/29(土) 14:13:34.08ID:5z81DYWR0
'########### 転記 ###########

'明細シートの組合員を定義(オブジェクトじゃないので注意)
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)
0060デフォルトの名無しさん (ワッチョイ 15b3-9NVx)
垢版 |
2019/06/29(土) 14:14:27.70ID:5z81DYWR0
'########### 昇順ソート ###########

'データシートの票をソート(アクティブにしないとエラー)
wsData.Activate
wsData.Range(dataKiten, Cells(dataKiten.CurrentRegion.Rows.Count + 1, 6)).Sort _
key1:=dataKiten, _
order1:=xlAscending
wsMeisai.Activate
0061デフォルトの名無しさん (ワッチョイ 15b3-9NVx)
垢版 |
2019/06/29(土) 14:15:48.93ID:5z81DYWR0
'############ 検索 #############

'明細書の票をクリア
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
0062デフォルトの名無しさん (ワッチョイ 15b3-9NVx)
垢版 |
2019/06/29(土) 14:16:14.86ID:5z81DYWR0
'---------組合員名で検索---------

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
0063デフォルトの名無しさん (ワッチョイ 15b3-H8Xf)
垢版 |
2019/06/29(土) 14:18:49.64ID:5z81DYWR0
すみません。
ちょっと長いんですが、よろしくお願いします!

なんか2chに貼るとインデントが消えました...
0074デフォルトの名無しさん (ワッチョイ fe68-bYGp)
垢版 |
2019/06/29(土) 17:03:34.38ID:ar/F9wgf0
>>70
そんなに面白いの?

>>73
まぁメインはできるだけシンプルにして、各ルーチンを外に出せば、
この先処理が増えてもメンテが楽って事
今から書き直すのは大変だからやらないほうが良い。そこに意味はあまり無い
0075デフォルトの名無しさん (ワッチョイ 5dda-bYGp)
垢版 |
2019/06/29(土) 17:06:01.70ID:ZIaZJNy10
>>73
いや、全部じゃなく、複数のプロシージャで使うものだけね。
あと、「脱初心者」ってことなら、1セルずつ処理するのではなく、
配列に入れてからの方がいい。
あとは、ループで探すんじゃなくて、
アドバンスドフィルタで一気に取り出して、後から書式を加工するとか。
0078デフォルトの名無しさん (ワッチョイ 15b3-H8Xf)
垢版 |
2019/06/29(土) 17:26:34.94ID:5z81DYWR0
>>74
わかりました。別のを作るときの課題にします!

>>75

1、あと、「脱初心者」ってことなら、1セルずつ処理するのではなく、
配列に入れてからの方がいい。

2、あとは、ループで探すんじゃなくて、
アドバンスドフィルタで一気に取り出して、後から書式を加工するとか。

この2点、今の俺には知識がなく、どんな処理になるのかイメージがわかないので、ちょっと勉強します!




お二方、アドバイスありがとうございました!
プログラミング、スゲーおもろいです。
0079デフォルトの名無しさん (スプッッ Sdea-mW/F)
垢版 |
2019/06/29(土) 17:54:48.66ID:Xi6piOZFd
これからプログラムを勉強する人への最大のアドバイスはVBAなんか辞めとけ
0081デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/29(土) 18:09:20.82ID:kjDvto4M0
>>65
一般的に多いキーボ−ドインターフェースの場合、スキャンしたものを取り込むのは難しいぞ。
多分、ここにいる人達じゃ無理だと思う。
キーボ−ドフックのコードが書けるかどうかだね。
シリアルの場合は簡単だけど。

セル内の文字列に1Dが含まれている可能性が高いからスキャンした文字を受ける必要は無いと思う。
それに面倒なキ−ボードフックのコードを書く前にセル内の文字列に含まれているかを確認する方が先だ。
0095デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/29(土) 22:16:55.30ID:kjDvto4M0
スキャンした文字列をVBAで受けるのが分からないと書いてたから、それは難しいぞと返しただけなんだが。
難しいのさえ知らなかった人達が多いんだからな。
そりゃ、ここじゃ無理だろ。

だからまず問題のスキャナから入力されたセルの値に1Dが入ってるかをまず確認してほしいんだがね。
0096デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/29(土) 22:20:10.77ID:kjDvto4M0
>>91
バーコードスキャナは全然違うものを送って来るよな。
キーボードの仕組みを知っている人は少ない。
VBA関係なく世間一般にプログラマーと呼ばれる人達においても。

メイクコード、ブレイクコードとかコマンドとかね。
0097デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/29(土) 22:40:36.99ID:/qzOxQgj0
>>93
> 全然ダメージないぞ、画面の向こうの相手を殺す気でやれ
自覚がないとか最悪だな
まあ自覚あったら回線切って二度と出てこれないわな

>>94
> qzOxQgj0で検索したら、役に立つ情報1つも書いてないじゃないか。
害悪な情報ドヤるよりマシだろw
まさかグローバル変数を勧めるのが役立つ情報とか言わないよな?
0105デフォルトの名無しさん (ワッチョイ fe68-bYGp)
垢版 |
2019/06/30(日) 06:26:13.81ID:cq9JZECt0
>>104
ExcelVBAはworkbookを中心にスクリプトを組むので、
実はグローバル変数のデメリットがあまりない
開発が1人なら尚更
1000行ぐらいのコードなら、さっさとグロ−バルでもなんでも使ってスクリプトを組んだ方が良い
0106デフォルトの名無しさん (スフッ Sdea-bYGp)
垢版 |
2019/06/30(日) 06:48:56.62ID:u2RU81MRd
このスレに、あきらかにプログラミング経験のかなり乏しいやつが紛れ込んでるな
キーボード操作に熟達してれば、普通はマイナスと長音を間違えたり混在させたりしない
0113デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 09:37:37.48ID:C4oDmko00
そういうところに無頓着なのは>>106の言う通りプログラムの経験なさすぎ
そんなレベルで
> 暇だし上げれば見てやるぞ
とか頭おかしい
で、結論が
> ExcelVBAはworkbookを中心にスクリプトを組むので、
> 実はグローバル変数のデメリットがあまりない
とかww
マジでちょっとは自覚した方がいいぞ
0117デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/30(日) 09:46:09.67ID:VDp+hLNV0
>>113
だから、お前は誰と勘違いしてるんだ?
それに、無頓着とプログラミング全く関係ないがwww

自分のレベルの低さを誤魔化そうとするな。
発言からレベルの低さは滲み出てるから誤魔化そうとしても無駄。
0119デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 10:04:37.76ID:C4oDmko00
>>114
ここでグローバル変数の弊害を説明しろと?
マジで言ってるならちょっとググってこいよ…

>>116
だから入門書とか見てる奴に引数もちゃんと書いてないコード示すなよって話な
VBAスレだと引数知らない奴がいても不思議じゃないし

>>117
はいはい、キーボードフック書ける君は凄いよ
これで満足かなw
0125デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 10:42:16.40ID:C4oDmko00
>>122
あのさあ、グローバル変数ガーって指摘してたら引数で渡してない事を言ってることぐらいはわかるだろ…
そんなところまでいちいち指摘するしかない所まで追い詰められてるのか?w
0130デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 10:50:26.49ID:C4oDmko00
>>128
で?
人の使った文章かどうかに関わらずグローバル変数を勧めるのが害悪なことには変わりないだろ
まあもう引っ込みつかなくなって話そらそうと必死なのはわかるけどさww
0134デフォルトの名無しさん (ワッチョイ 2d94-mW/F)
垢版 |
2019/06/30(日) 11:06:21.97ID:tuHSj4I20
VBAはエクセル専用用途だから意味があるんじゃないの?
エクセル以外なら他言語推奨
0141デフォルトの名無しさん (ワッチョイ 15d0-+h6O)
垢版 |
2019/06/30(日) 11:43:50.56ID:e1gn7el30
>>138-139
挙げるとキリが無いから省いたが、ほとんどのMicrosoft Office製品に入ってると思っていい
(PublisherとかProjectとかVisioとかそういうの)
ちなみにWordで組んだのは文脈から漢数字だけを判別して半角英数字に置換したり段落書式を設定したりアウトラインとかインデントを付けたりとかそういうの
話が脱線するのでこの辺で
0143デフォルトの名無しさん (ワッチョイ d602-/vdH)
垢版 |
2019/06/30(日) 12:22:24.26ID:gq8hO7PC0
俺、初心者だけど、C4oDmko00が劣勢なのはすごい分かる

イチャモン付けてケンカ吹っかけたけど、
相手が強すぎて、返り討ちにあって逃げてるチンピラみたい

かわいそう。。。
0146デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/30(日) 13:26:23.09ID:VDp+hLNV0
>>136
???
またおかしなこと言い出したぞwww

引数取らないプロシージャ並べて呼び出す時にグローバル変数で連携しようとするのを批判してるんだろ。
引数知らなくても批判出来るし、知ってたら一番先に引数について言及する筈なんだけどwww
0151デフォルトの名無しさん (ワッチョイ 15d0-+h6O)
垢版 |
2019/06/30(日) 13:52:45.81ID:e1gn7el30
>>145
>>65でID:ar/F9wgf0がプロシージャを分けると見やすいと例示した動かないコード
それを見たID:C4oDmko00がなぜかグローバル変数の使用を推奨していると勘違い
グローバル変数以外にも引数で渡すこともできるし、もっと他の方法もあるのになぜか「お前グローバル変数推奨したやろ」の一本槍で糾弾


ちなみに>>65をぱっと見ただけで俺が思いついたのは:
・モジュールレベル定数(Private Const)を使う。
・モジュールレベル変数(Private)を使う。
・必要な変数のみを引数としてプロシージャに渡す。
・自作クラスを作る。
スキルが低い俺でもこんだけ色々な選択肢があるなーと思うわけだが、どれを選択するかは書く人の自由で、
「これをどう動かすかは自分で考えろ」というだけのことだろう。


余談だが、俺はグローバル変数=パブリック変数(Publicステートメントで宣言する変数)だと思ってた。
0155デフォルトの名無しさん (ワッチョイ d602-/vdH)
垢版 |
2019/06/30(日) 14:16:35.06ID:gq8hO7PC0
俺がここ(>>65)で教えてもらったのは、色々な書き方があるって事で、絶対こう書けってことは言われてないぜ。
俺が脱初級者になる為の一つのヒントをもらっただけで、俺の技量が上がれば、何が最適か自分で判断するよ。


凄腕の人が、ヒントやキーワードを無料で教えてくれてるだけで、ホント感謝だわ。
0156デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 14:19:10.48ID:C4oDmko00
>>151
スコープの話にしようとしてる?
まあどんな方法を取るかはプログラマー次第だけど、今時グローバル変数/モジュール変数はなぁっていうだけの話
あと自作クラスを作るのはいいけどそのインスタンスはどうやって持つつもり?
0161デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/30(日) 14:55:17.57ID:VDp+hLNV0
>>152
何故引数を知らないと批判出来ないんだ?
バカ過ぎだろ。

お前のような初心者はプロシージャを分けるという発想が無い。
引数を知らないからプロシージャを分けたら連携するためにはグローバル変数を使うしか無いと思ってたんだろ。
バレバレだ。
0167デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 16:01:59.12ID:C4oDmko00
マジで言ってるのか…

>>73
> ということは、dimしてる行を全部外に出せば良いのですかね?

これはグローバル変数を使うことを示唆してる
それに対して>>74が何も言ってないから指摘したの、わかる?

ちなみにいま読み返したら
>>75
> いや、全部じゃなく、複数のプロシージャで使うものだけね。
と、もっと直接的に言ってるアホがいたわ
しかもそいつは
>>103
> 誰もグローバル変数なんか勧めてないが。
とか言ってるしww
0170デフォルトの名無しさん (アークセー Sxed-JXRV)
垢版 |
2019/06/30(日) 16:37:19.69ID:Pna16KLyx
ちなみにグローバル変数絶対反対っていう風潮って古いよね
ローカル変数を多用した状態管理って保守運用のフェーズでは多重階層化の弊害を招きかねないから変数スコープの制限はケースバイケースでしょ
0190デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/30(日) 19:44:36.48ID:VDp+hLNV0
>>187
全然反論になっていない。
グローバル変数を勘違いしようがしまいが、お前が引数を知らないで、プロシージャを分けるとグローバル変数を使用するしか無くなるという頓珍漢な批判したことは変わらない。
0205デフォルトの名無しさん (ワッチョイ a991-afcP)
垢版 |
2019/06/30(日) 20:47:56.97ID:VDp+hLNV0
>>203
はい?
何言ってんだ?

機能分割とグローバル変数は関係ないぞ。
アプリ全体で使いたければグローバル変数にするだろ。
プロシージャを何個もまたぐのに、それだけの為に全部引数で渡すのか?

プロシージャに分けるのは汎用化、独立性の為で、その為にグローバル変数じゃなく引数にするということはある。
しかし、アプリ全体を通して使いたいものは、グローバルで問題無いぞ。
0206デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 21:17:09.76ID:C4oDmko00
>>204
> 外に出して使うケースを書いただけだぞ。
だからそれはなんのためにやるんだ?
って聞いてるのにローカルがどうのこう言われてもねぇ…
重ねて言うけど外に出さないケースなんて聞いてないから
0209デフォルトの名無しさん (ワッチョイ ca01-BSeC)
垢版 |
2019/06/30(日) 21:26:36.15ID:C4oDmko00
>>205
例えばログ用のインスタンスとかならあるだろうな
でも>>65みたいなケースはちがうでしょ?
具体的に言えば例えばkumiaiinっていう変数は「転記」と「検索」でしか使ってないのにグローバル変数にするの?
って話ね
0211デフォルトの名無しさん (アークセー Sxed-JXRV)
垢版 |
2019/06/30(日) 22:01:39.30ID:Pna16KLyx
ワークブックとかシートとかのExcelオブジェクトでPublic変数を定義する場合と標準モジュールでPublic変数を定義する場合とでは挙動が違うっていう点も大事だと思うんだよな
0224デフォルトの名無しさん (ワッチョイ 93ce-tOvn)
垢版 |
2019/07/09(火) 12:13:15.60ID:DKfsNX1q0
ゼロからPDF形式のファイルを生成するだけなら簡単
下位互換はあるから、昔の簡単なフォーマットで作ればいいだけだから

最新バージョンの編集は、機能が増えすぎてちょっとやそっとじゃ対応できない
PDFの仕様書はネットに転がってるから、あとはやる気次第かなあ
https://itchyny.haten%61blog.com/entry/2015/09/16/100000
0225デフォルトの名無しさん (スップ Sd1f-SD32)
垢版 |
2019/07/09(火) 19:47:33.40ID:IlkFvBc6d
だからそんなのをVBAでやるなって
エクセルとかオフィス専用なんだろ?
0228デフォルトの名無しさん (ワッチョイ 03f1-6S3C)
垢版 |
2019/07/10(水) 03:46:18.75ID:/43btnxd0
>>227
駄目だから聞いておるのだ
0230デフォルトの名無しさん (ワッチョイ 03f1-6S3C)
垢版 |
2019/07/10(水) 05:04:32.44ID:/43btnxd0
>>229
このハゲー!
0241デフォルトの名無しさん (ワッチョイ 6ff7-T0Pq)
垢版 |
2019/07/10(水) 11:04:25.88ID:ZjOdLx630
Private Sub TextBox1_Change() の1行を
Sub ボタン2_Click()
に変えれば動くはず。
0243デフォルトの名無しさん (ワッチョイ 6ff7-T0Pq)
垢版 |
2019/07/10(水) 11:37:21.93ID:ZjOdLx630
ごめん確認したけどActiveXじゃないフォームコントロールのボタンだと
シートモジュールに書いても無理だったわ。
標準モジュールに以下のとおりやると動く

Sub ボタン1_Click()
MsgBox Worksheets(1).TextBoxes("txt").Text
End Sub

ワークシート1枚なのが前提だから調整してね。
0244デフォルトの名無しさん (ワッチョイ 6ff7-n2RV)
垢版 |
2019/07/10(水) 11:44:51.66ID:ZjOdLx630
オブジェクト名だけでの直接指定ってシートモジュールでないと通じないし
でもフォームコントロールのイベントは標準モジュールに書かないと動かないっていう
0250デフォルトの名無しさん (ワッチョイ b3f9-NenP)
垢版 |
2019/07/10(水) 12:09:25.00ID:yoXwfxDh0
>>244
まあ、「フォームコントロール」は使うなと教わった気がする
ActiveXですべてコントロール書くな
混ぜて使うと今回みたいにぐちゃぐちゃになるよな
>>245
>ボタンのプロパティが表示されない
ああ、フォームコントロールは表示しないのか、使わんほうがいいと思う
0254デフォルトの名無しさん (ワッチョイ c301-ebHh)
垢版 |
2019/07/10(水) 23:29:23.93ID:c8eGatqv0
簡単なフォーム作って動作確認したらテキストボックスの内容だけが指定セルに入力されません。
どこを修正できるかおしえてくれませんか?
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
0259デフォルトの名無しさん (ワッチョイ f391-+B7N)
垢版 |
2019/07/10(水) 23:46:55.16ID:kmPcU4z40
選択してなくても入力出来るし、普通はセルを選択するコードって書かないものなんだ。

敢えて、ユーザーにここだよと知らせるために選択することなんかは有るけどね。
0260デフォルトの名無しさん (ワッチョイ c301-1LOi)
垢版 |
2019/07/10(水) 23:54:25.92ID:c8eGatqv0
>>258
確かにChengeプロシージャはなくていいと気づきました。クリックイベントで思いっきり指定してますね。ありがとうございます。
そこを丸々消してもテキストボックスの内容が指定したセルに入力されないところがどうしても分かりません、、、
0263デフォルトの名無しさん (ワッチョイ 4e63-YtL5)
垢版 |
2019/07/11(木) 22:57:04.73ID:xkc4Rvzm0
レポートでexcelの問題が出たのですがexcelのeの字もわからないド素人で
全く解ける気配がないので解いていただきたいのですが

excel表↓
https://gyazo.com/09fca1ee73fb7c9e157e34b8087266aa
処理条件↓
https://gyazo.com/ea0a04a984a92f0cdf4fb02024003e06
問題↓
https://gyazo.com/91b5a7da5245d2ff536597fcf7414b13
https://gyazo.com/7bebc69a5a6ef8e282adfdf814311a72
https://gyazo.com/c55982b0303f977923d30dd1c46ec9d2
https://gyazo.com/deb035bd0a7e3e3118e3bfac5ef26071

excel表と処理条件を見て問題を解く感じです
お手数ですがどうかお願い致します
0268デフォルトの名無しさん (ワッチョイ 4e63-YtL5)
垢版 |
2019/07/11(木) 23:25:23.16ID:xkc4Rvzm0
プログラミングに興味があってしてるわけじゃないので分からないままで大丈夫です
教科書を見ても該当の問題がないので八方塞がりになってます
ですのでお願いします><;
0271デフォルトの名無しさん (ワッチョイ db8e-RA7T)
垢版 |
2019/07/11(木) 23:42:29.20ID:024QjgN/0
>>268
馬鹿は死ね
0277デフォルトの名無しさん (ワッチョイ 1ab0-rCBe)
垢版 |
2019/07/12(金) 06:55:24.80ID:X0laGJXI0
>>268 みたいなこと書いたら火に油。
・表計算の関数式はプログラムではない。Excelのプログラム言語はVBAで、関数式ではない。

・質問内容がExcelとネット環境が使える状態ならヘルプやネット検索で得られる情報で手元検証しつつで解ける初歩の初歩レベル。やるべきはここで丸投げや教科書を調べることではなく、ヘルプやネットの調べ方や、キーワード抽出能力、試し実験する能力
これらの能力はExcelに限らず仕事全般に必要
0278デフォルトの名無しさん (ワッチョイ 03fb-YtL5)
垢版 |
2019/07/12(金) 07:29:13.34ID:Q/r6ioNA0
その一文なくても答えてくれてなかったと思うけどね
上の質問内容もレポート全ての問題ではなく調べても考えてもい解けなかった7問です
その上で質問したので丸投げとか言われても・・・。
0279デフォルトの名無しさん (ワッチョイ db8e-RA7T)
垢版 |
2019/07/12(金) 07:33:03.45ID:6bL6jjvK0
>>278
スレの違いすらわからない丸投げの馬鹿
マルチポスト
死ねや
0281デフォルトの名無しさん (ワッチョイ 0e68-AvHN)
垢版 |
2019/07/12(金) 07:37:58.23ID:/IwseM/M0
>>278
どうやって調べたか教えて欲しい
複合参照一つにしても、
「セル番地を複合参照で列を固定」質問文そのまま検索するだけで答えが出てくる
これ以下の行動が想像出来ない

納得できる理由を持ってきたら全問解いてやるぞ。
0282デフォルトの名無しさん (ワッチョイ 03fb-YtL5)
垢版 |
2019/07/12(金) 08:19:59.80ID:Q/r6ioNA0
>>281
それはあなたがexcelの基礎を熟知してるから調べたらすぐ納得出来る答えが見つかるだけです
excelの知識0未満の自分が検索しても相対参照複合参照セル参照、固定etcどんどん理解不能な専門用語が出てくるだけで
基礎知識0の人間がいくら調べたとこで応用の問題が解けるわけない
努力とか苦労とか抜きで単純に教えたくないだけでしょ
0から腰を据えて勉強する時間もないので色んなとこをあたってみます
0283デフォルトの名無しさん (ブーイモ MMff-ipzv)
垢版 |
2019/07/12(金) 08:28:22.02ID:MpRoJlc8M
>>282
昔自分もそうだったから気持ちわかるよ
ただわからないままでいいから答えだけ教えろって態度が良くなかったね
Excel総合相談所の方では途中まで答えてくれようとしていた人いたのに勿体無い
0286デフォルトの名無しさん (ワッチョイ 577c-hzFB)
垢版 |
2019/07/12(金) 09:47:37.46ID:29ekbyBa0
どこの質スレでも、どこまでわかっててどこからわからないかとか説明しないと丸投げは答えを貰いにくい
それはともかくとして内容的にここではスレチなので該当スレに移動して聞くのがよい
そういうの無視して自己中心的な態度を取ると相応の反応しか来ないことが多い
0287デフォルトの名無しさん (ワッチョイ b6f7-YtL5)
垢版 |
2019/07/12(金) 11:24:29.37ID:/cn0QgdD0
>>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)

一番目は問題文が意味不明すぎて何ともいえない。答えを記入て?コピー入力時の値なの入力数式なの?
二番目、レポート第三回「算術演算子のミス」ってのが*/じゃなく×÷を使えって意味なら変えてね
0288デフォルトの名無しさん (ワッチョイ b6f7-YtL5)
垢版 |
2019/07/12(金) 11:26:26.64ID:/cn0QgdD0
三番目の0.2は20の間違いだった
0291デフォルトの名無しさん (アウアウクー MM7b-aCRW)
垢版 |
2019/07/12(金) 17:23:38.01ID:pyjYzCB0M
>>282
何のレポートか知らないけどこういう試験みたいなレポート課されるってことはExcelのこと教えてくれる講義かなんかでしょ?
それ取っといて基礎知識0なわけないよね
サボってたなら自業自得だ諦めろ
0292デフォルトの名無しさん (スッップ Sdba-oxAJ)
垢版 |
2019/07/12(金) 18:12:35.56ID:4Zy3LZ5Ld
ここで教えてもらったり聞いたりするのも勉強だろ?
丸投げで解決するなら効率良いし
0296デフォルトの名無しさん (ブーイモ MMff-Xwip)
垢版 |
2019/07/12(金) 19:58:53.73ID:0f105GfpM
礼儀w
ここをどこだと思ってるんだ
0297デフォルトの名無しさん (ブーイモ MMff-Xwip)
垢版 |
2019/07/12(金) 19:59:54.35ID:0f105GfpM
顔が赤い?
ここはインターネットだから見えないのになぜわかるw
0298デフォルトの名無しさん (ワッチョイ 0e68-AvHN)
垢版 |
2019/07/12(金) 20:11:35.98ID:/IwseM/M0
>>296
vbaスレだよ
下手に出るor努力家なら普通に教えるし、
上から目線で面白いキャラならそれはそれで笑いの対価に答えてあげる楽しいスレ

俺はどう調べたかを教えてくれれば答えるつもりだったけど、何故かそれすら無かった
0300デフォルトの名無しさん (スッップ Sdba-oxAJ)
垢版 |
2019/07/12(金) 20:23:30.14ID:4Zy3LZ5Ld
>>287さんのような立派な人が教えてくれる
何も知らない人は難癖付けて優越感に浸るだけ
0301デフォルトの名無しさん (ブーイモ MMff-Xwip)
垢版 |
2019/07/12(金) 20:25:42.71ID:0f105GfpM
うんち大学うんち学科のうんち講義の課題だ
0304デフォルトの名無しさん (ワッチョイ e301-YtL5)
垢版 |
2019/07/12(金) 20:40:23.09ID:mfoRyya60
>>298
最初は下手に出てたけど嫌味を言ってくるから同じ対応しただけっすよ^
何度も言ってるけど自分にexcelの基礎知識が一切ないから「こうやって解こうとしたけど此処が分からなかった」とか
理屈だって説明ができないって言ってるじゃん。日本語理解してます?
最初から教える気がないくせに気持ちが悪い。
(解いて貰うことが当たり前とは全く思ってないけど、こういう難癖爺は本当に不愉快です)
0309956 (スププ Sdba-4ml8)
垢版 |
2019/07/12(金) 21:12:02.87ID:JRZDO5f+d
最初から一貫して、考える気がないから答えだけ教えろと言ってるから反発を買ってると何故わからない
そういうのは下手に出てると言わない
それ以前にスレチ、マルチポストなんかどこでも嫌われる
0310デフォルトの名無しさん (ワッチョイ db8e-RA7T)
垢版 |
2019/07/12(金) 21:17:37.52ID:6bL6jjvK0
>>304
死ねや、クズ
0311デフォルトの名無しさん (ブーイモ MMba-ipzv)
垢版 |
2019/07/12(金) 21:24:19.02ID:uqHBg6aCM
何がどうスレチなのか本人理解していない
本当にExcelを起動させたことだけはあるってレベルなんだろうな
それにしても相対参照なんてはじめてのExcelみたいなテキストの初めのほうに出てくるのに理解不能な専門用語って…
0315デフォルトの名無しさん (ワッチョイ 1709-YtL5)
垢版 |
2019/07/12(金) 22:12:20.02ID:smOphNvK0
>>313
出ている問題文を区切って単語単位でいくつか検索しましたよ。
・・・ですが基礎知識が皆無なので分からない単語が更に増えていくばかりで意味がなかった。
答えにたどり着いていたとしてもそれが答えなのかどうかもわからない。
理由は単純明快で”どこどこ”が分からない等ではなく”excelの全てが”分からないからです。>>311さんの言う通りexcel起動したこともないので
まあ此処では教えてもらえないでしょうね
0319デフォルトの名無しさん (ワッチョイ 1ada-AvHN)
垢版 |
2019/07/12(金) 22:30:53.10ID:Es4UsF4s0
そういやあっちのスレに、OSがWindows10で、バージョンはExcelって書いてるな。

バージョンがExcelって何だよ?
一体どんな環境で勉強してるんだ?
紙だけでやろうとしたら、そりゃわからんわ。
0321956 (スププ Sdba-4ml8)
垢版 |
2019/07/12(金) 23:16:14.01ID:XVv52DQ4d
Excel起動したこともないって、完全にやる気ないんじゃん
実際にやっても見ずに文字だけ見たってわかるわけがない、そんなの知識あるなしは関係ない
なんでそれをそんなにドヤって語れるんだ
ほんとに身勝手だな…
0329デフォルトの名無しさん (ワッチョイ 1a2f-i8Xk)
垢版 |
2019/07/13(土) 07:30:37.64ID:URTJU5cT0
問題に親切にも、教科書P99とか、レポート第3回参照とか書いてあるけどな

99ページ超えるような教科書と、過去3回以上のレポート提出があって
エクセルの知識ゼロとか言うあたり、どうしようもないな
0330デフォルトの名無しさん (スッップ Sdba-oxAJ)
垢版 |
2019/07/13(土) 09:00:32.20ID:/hcsiiwtd
人に教える能力がない奴に限って大声で叫ぶ
分からないなら黙ってりゃ良いのに出しゃばるなってw
>>287さんのような人は素晴らしい
0333デフォルトの名無しさん (ワッチョイ db8e-RA7T)
垢版 |
2019/07/13(土) 10:27:47.26ID:BOO56W8H0
>>330
こんな馬鹿に回答を示すやつが馬鹿だろ
0334デフォルトの名無しさん (スッップ Sdba-oxAJ)
垢版 |
2019/07/13(土) 10:33:21.62ID:/hcsiiwtd
>>333
反応するお前も馬
0338デフォルトの名無しさん (ワッチョイ dbd0-qIdb)
垢版 |
2019/07/13(土) 13:32:22.46ID:WjcplQ3r0
これまで発掘された投稿(日付順)
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
0340956 (スププ Sdba-4ml8)
垢版 |
2019/07/13(土) 14:19:52.14ID:gczMvB9Ad
なんか手当たり次第だな
しかも行く先々で自己中で上からだし、根っからそういう性格なんだな…
こんな事で時間浪費するより先生に聞くなり泣きつくなりした方が早いのに
0353デフォルトの名無しさん (ワッチョイ dbf1-Xwip)
垢版 |
2019/07/15(月) 12:11:27.76ID:nnQ6IJ0T0
VBAでクラスのメンバに配列がpublicで宣言できないのです。
これはなぜですか?
privateならできるようです
そういう仕様になった背景に異常に興味があるのですがなぜでしょうか?
0355デフォルトの名無しさん (ワッチョイ dbf1-Xwip)
垢版 |
2019/07/15(月) 12:29:52.78ID:nnQ6IJ0T0
>>354
いやgetter, setterのPublic Functionを作って使った
0357デフォルトの名無しさん (ワッチョイ dbf1-Xwip)
垢版 |
2019/07/15(月) 14:16:26.74ID:nnQ6IJ0T0
>>356

問題ないわよ
0365デフォルトの名無しさん (ワッチョイ 9a01-DHp5)
垢版 |
2019/07/15(月) 19:30:49.08ID:ex33LrHm0
>>364
> VBAできたのOffice95だろ?
Excel だけは先行しててExcel 5.0から
Office 95からWordとかAccessにも搭載された
> 16bitに毛が生えたようなリソースで
配列は32KB制限とかあるからリソース関係って言うのはあり得ると思う
0368デフォルトの名無しさん (ワッチョイ 0b01-YggF)
垢版 |
2019/07/15(月) 21:34:48.93ID:P4vPK//00
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に変更したいのですが、やり方がわかりません。どうかご教示ください。
0369デフォルトの名無しさん (ワッチョイ 0e68-AvHN)
垢版 |
2019/07/15(月) 21:46:33.77ID:pIjNztNi0
>>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
0379デフォルトの名無しさん (ワッチョイ 1791-ipzv)
垢版 |
2019/07/16(火) 19:47:18.06ID:OkBSeMU90
>>378
だから変数じゃないし。
プロパティーだし。
クラスがpublicな変数持ってるという考えが既に変に感じる。
勿論、内部にprivateな変数を持ってるのは当然だけど。

カプセル化等という言葉では無く(実際はその通りだけど)、感覚としてオブジェクトというものを捉えていれば普通の感覚。
0381デフォルトの名無しさん (ブーイモ MMff-D7xh)
垢版 |
2019/07/16(火) 20:04:05.57ID:Qwm6v/XnM
>>379
同じだなんて言ってないでしょ?

> クラスがpublicな変数持ってるという考えが既に変に感じる。

なんで??
勝手に触っちゃダメとか変更に弱くなるいうのはわかるが、それ以外の理由を持ってるみたいだね?
0382デフォルトの名無しさん (ワッチョイ 1791-ipzv)
垢版 |
2019/07/16(火) 20:20:17.00ID:OkBSeMU90
>>381
カプセル化と結局一緒だけど、オブジェクト志向的に自然な考えからするとpublicな変数というのが変。
オブジェクトに意味のない数値がくっ付いてるイメージだね。

Excelでいうとセルに何故か変数がくっ付いていて、それがセルに関わるValueとかLeftとかそういう"意味付け"も持っていない感じ。
0383デフォルトの名無しさん (ワッチョイ 1791-ipzv)
垢版 |
2019/07/16(火) 20:23:52.51ID:OkBSeMU90
クラスというのはオブジェクトを設計するわけだから意味の無いものをくっ付けるのは設計として違和感がある。
そして、意味が有るものはプロパティーとして設計するから自然にGET、LETを使ってた。
0384デフォルトの名無しさん (ワッチョイ 0e68-AvHN)
垢版 |
2019/07/16(火) 20:24:21.96ID:lW4DFx/50
>>373
そもそもvbaでクラスを作る事は本当にない
ブックがpublicみたいに見えるから今更privateとかにしても仕方ない

実際はprivateブックの下位に書いてるからpublicに見えるだけなんだろうけど、まぁ同じ
0386デフォルトの名無しさん (ワッチョイ dbd0-qIdb)
垢版 |
2019/07/16(火) 21:09:04.93ID:B8vpu2Gm0
>>385
うまい言葉が見つからんが、ようは「宗教観の違い」ってやつじゃないか?
たぶん>>383の言いたいこととしては、
「プロパティにアクセスしてGetなりLetなりSetなりできるのに、
 この上Publicにして外部モジュールからメンバ変数への直接参照を可能にする意味があるのか?(設計おかしくね?)」
みたいな感じじゃないかなと思う。
0389デフォルトの名無しさん (ワッチョイ dbd0-qIdb)
垢版 |
2019/07/16(火) 22:55:41.34ID:B8vpu2Gm0
>>388
>GetもLetもできるならPublic変数でよくね?
そういうところが「宗教観の違い」なんだろうと思ったわけで。
>>383がこう思ってるんじゃないかなと思って書いただけだから、実際言いたいことは違うかもしれんし。
0394デフォルトの名無しさん (ワッチョイ 0e68-AvHN)
垢版 |
2019/07/17(水) 21:54:24.06ID:1fZng5Go0
程々が一番なんだけど、vbaに至ってはその采配がマジで難しい
普通は使い勝手の悪い言語は全自動で廃れるけど、恐らく唯一無二で太古の使い勝手のまま広まってしまった言語
どうしても荒れると思うし、正解もない
0398デフォルトの名無しさん (ワッチョイ fff7-ShKg)
垢版 |
2019/07/18(木) 17:33:44.07ID:iWlQ47rb0
まちがえた
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
0402デフォルトの名無しさん (ワッチョイ fff7-ShKg)
垢版 |
2019/07/18(木) 20:19:45.62ID:iWlQ47rb0
もし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
0403デフォルトの名無しさん (ワッチョイ 4f91-9KOF)
垢版 |
2019/07/18(木) 21:09:01.60ID:Vm+OSKMy0
’こんな感じじゃなくて?
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
0407デフォルトの名無しさん (ワッチョイ 3f8a-8mHW)
垢版 |
2019/07/20(土) 05:25:11.57ID:TdLuYGU30
どんな状況で使うんだそれwww
勝手に削除するやつがいるのか?
0409デフォルトの名無しさん (スップ Sddf-9W53)
垢版 |
2019/07/20(土) 07:37:09.15ID:vf/4Yo8ld
Worksheet_Changeイベント内で

if Target.Columns.Count=Columns.Count Then

の中に、コピーされた時を想定してデータを貼り付けた時に特定のセルを消してます。

このイベントは行削除も行挿入もif中に入ってくるので、その2つの場合は除きたいんですけど、無理ですかね?
0412デフォルトの名無しさん (ワッチョイ 8fad-9k8E)
垢版 |
2019/07/20(土) 14:06:46.24ID:yIzn2tUG0
>>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
0413デフォルトの名無しさん (ワッチョイ 8fad-9k8E)
垢版 |
2019/07/20(土) 14:13:01.97ID:yIzn2tUG0
別途配列にも代入しとけば、削除に反応してSQLのDELETE文の発行にも使えるね
そんなことやったような記憶
あんまりお洒落なことすると、ハマる恐れもあるが
0417デフォルトの名無しさん (アウアウカー Sac3-msqt)
垢版 |
2019/07/21(日) 11:12:02.68ID:4aIgjVvla
「VBA StringBuilder」とかでググって出てくるコードの例(具体的にはhttps://qiita.com/e-katayama/items/8a114357b0df91cfbdbbなど)をベースに、特定の変換をかけた文字列を高速に連結する方法を考えてるんだが、
Midステートメントを使った置換そのものは早いんだが、クラス化すると処理全体としては&演算子を使った連結の方がなぜか早くなる。
可能な限り文字列型への代入は避けてるし、引数もByRefにしてるんだが、イマイチ原因がピンとこない。
StrPtrでm_bufferのポインタを確認すると、クラス内から見ればポインタはずっと同じだが、
呼び出してる外部モジュール側から確認すると、AppendやToStringとかのメソッドを呼び出す度に2つのアドレスを行き来してる。
これは自分のやり方が悪いんだろうか?
0424デフォルトの名無しさん (アウアウカー Sac3-msqt)
垢版 |
2019/07/21(日) 14:18:30.41ID:4aIgjVvla
>>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
になってる、ぐらいなもん。
やっぱ、文字列型変数の評価回数が多いせいなんだろうか?
0427デフォルトの名無しさん (ワッチョイ 8f8e-DngZ)
垢版 |
2019/07/21(日) 16:44:43.49ID:zVh3KjUp0
全角文字で書くような馬鹿の後出し言い訳か
0428デフォルトの名無しさん (ワッチョイ 4fad-9k8E)
垢版 |
2019/07/21(日) 17:18:46.36ID:YTBWsrAX0
なぜかちょうど今やってることと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秒、困る場面はあり得ない
0430デフォルトの名無しさん (ワッチョイ 7f68-0ngu)
垢版 |
2019/07/21(日) 17:51:10.98ID:tbU/thR+0
>>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秒に減らしたいってなら寝る
0432デフォルトの名無しさん (ワッチョイ 3fda-0ngu)
垢版 |
2019/07/21(日) 21:44:27.38ID:wqzeAX+60
PDFに、AddNewAnnotでテキスト注釈を追加しようとしても、
ポップアップ注釈になっちゃう。
何でだろう?

第2引数には"Text"を指定していて、
Debug.PrintでGetSubtypeを確認しても、間違いなく"Text"と表示されてるのに。
0434デフォルトの名無しさん (ワッチョイ 3f59-6LU0)
垢版 |
2019/07/22(月) 00:41:41.83ID:sdD1SeGB0
100個くらいのxlsxデータを1つ1つ開かずにセル値を配列に格納させたいんだけど
できるだけ速く処理させるにはどんな方法がありますか?
データベース形式のファイルでないのでADO接続は諦めました。
0438デフォルトの名無しさん (ワッチョイ 3f2c-QKg6)
垢版 |
2019/07/22(月) 06:18:13.29ID:GAEqWBnq0
>>428
言語による、処理系の速度の比較

C/C++ のnative・マシン語系 : 100
Java, C# などのコンパイル・中間言語系 : 10
JavaScript, Python, Ruby などの動的言語系: 1

なお、JIT は、フィボナッチ数列・素数などの計算では速いが、普通のプログラミングでは無意味

遅い理由は、I/O, 動的配列(動的コンテナ)などでメモリを動的に確保する、
動的にアドレス計算するなど
0441デフォルトの名無しさん (ワッチョイ ff68-ShKg)
垢版 |
2019/07/22(月) 19:19:01.79ID:MenVMjW60
Excel VBAはExcelの評価が入るとすげー遅くなるけど、
EXCELの評価ナシならそこまで遅くない
ただ、vbaで速さを求めるのはナンセンスだと思う
0444デフォルトの名無しさん (スププ Sd5f-x7W1)
垢版 |
2019/07/22(月) 23:58:25.16ID:ZZbz3w4Ud
>>434
定期的にインデックス化するのは他言語なら常識
0445デフォルトの名無しさん (ワッチョイ 4fad-9k8E)
垢版 |
2019/07/23(火) 05:29:57.32ID:LmcM+lna0
意外と記憶にないコレクションからの連結
追加時にサイズを記録しといて、最後にぴったりサイズでメモリ確保して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秒ぐらいかかってびっくりした
そんな違うんだね
0446デフォルトの名無しさん (ワッチョイ 4fad-9k8E)
垢版 |
2019/07/23(火) 06:30:29.98ID:LmcM+lna0
>>441
Excelの強みはむしろシートだと思う
ただしデータ処理用ではなく、表示・操作用のグリッドコントロールとして
VSにこんな高速高機能なグリッドコントロールはない、はず(知る限り)

特に CopyFromRecordset の異様な速さ
大量に表示した状態での動きも速い
DBの表示媒体として実は最強だと思う
(他の言語からExcelを呼び出してもいいので、VBA限定ではないけど)
0447デフォルトの名無しさん (ワントンキン MM9f-Ei4u)
垢版 |
2019/07/23(火) 12:43:05.74ID:Wmp6rbs0M
セルA1からはじまる、5万行30列あるディレクトリツリーを、グループ化したいんですが、
最初のA列のみはエクセルのグループ化でうまくいくけど、B列以降がうまく行きません。
VBAでいっぱつで処理できる方法ってありますか。
0448デフォルトの名無しさん (スッップ Sd5f-k2pK)
垢版 |
2019/07/23(火) 13:58:45.14ID:6EIv8bzUd
>>446
何か勘違いしてない?
エクセルが速いなんて全くないんだけど
0449デフォルトの名無しさん (ワッチョイ 0f95-k+pP)
垢版 |
2019/07/23(火) 14:14:05.21ID:+7TCISw60
>>446
sed や tail などでいい
30GBのテキストも0.04秒で tail できたし
編集も sed は問題なかった

行数上限がない理想的なExcelが将来でても
そういう大きいDBはしんどいんじゃないかな?
0451デフォルトの名無しさん (スッップ Sd5f-k2pK)
垢版 |
2019/07/23(火) 16:49:12.46ID:6EIv8bzUd
つうかDBは同時接続数が多くなるほど威力を発揮する
単一接続のエクセルと比較するのがどうかと思う
0452デフォルトの名無しさん (スプッッ Sddf-9W53)
垢版 |
2019/07/23(火) 18:25:17.72ID:W2R1kWYLd
質問です。

長さAに対して等間隔の点のピッチを計算したい。欲しい答えはピッチ長さ、両端の数字。

条件
両端は同一数値で30以上50以下。ピッチは190以上220以下。
共に50と220の整数に近い数値。

結果
長さ  1200
ピッチ 220☓5
両端  50

こういった計算って結構面倒くさいですか?
関数電卓で計算する分には出来ますがVBAだと全く思いつきません。
宜しくお願いします。
0456デフォルトの名無しさん (ワッチョイ 8f8e-DngZ)
垢版 |
2019/07/23(火) 19:57:04.84ID:vEtQ8tFE0
>>452
馬鹿は死ねや
0460デフォルトの名無しさん (ワッチョイ 0f95-k+pP)
垢版 |
2019/07/24(水) 12:08:14.05ID:/HKiGEdd0
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))の
どちらが欲しいのかわからないな
0463デフォルトの名無しさん (ワッチョイ 8f01-Ge65)
垢版 |
2019/07/24(水) 17:22:10.81ID:l/M93qCQ0
勤務表の作成目的での使用は可能でしょうか。
50人の職員で勤務時間帯が7種類あり、休み希望や特定の勤務帯の希望があれば絶対にその希望にしなくてはならない。希望を入れたらあとは乱数で勤務表が出来るなんて事は可能ですか?
0467デフォルトの名無しさん (ワッチョイ 8fad-9k8E)
垢版 |
2019/07/24(水) 17:52:45.82ID:MYVnxp7u0
>>449
「DB」というのは、SQL Server等のDBサーバのこと
Excelを「DB」という言い方したことはないよw

そのDBサーバの内容を動的に転写して、
編集画面として使う場合、Excelが最速ってこと

編集画面なので、元データが100万行あっても、表示するのは人間が作業できる数十行や数百行
根性のある事務員がいると、千行ぐらい一気に扱えるよう要求される場合もある
千行ぐらい行くと、一般のグリッドコントロールでは動作が重くなるが、Excelはすぱっと動く、という話
0472デフォルトの名無しさん (ワッチョイ 7fb0-o+hp)
垢版 |
2019/07/24(水) 23:53:52.50ID:/T35oaZK0
>>471
ユーザーフォーム内に複数のexplorerを埋め込んで、それぞれを独立して動かしたいです。
例えば、explorer1、2、3があるとしてexplorer1でディレクトリ遷移したらexplorer2や3はexplorer1に追従しないようにしたいです。
0476デフォルトの名無しさん (アメ MMc7-HdTi)
垢版 |
2019/07/25(木) 00:33:27.67ID:5qtaCE1dM
>>474
あなたは必要な用件が例えば20有るところ今2つしか言えてない
各自への負荷分散や希望労働時間も考慮すると乱数なんて使わない
仕事分かってない奴は仕様も作れない
0480デフォルトの名無しさん (ワッチョイ eaa2-KIok)
垢版 |
2019/07/25(木) 02:17:55.08ID:j99gzyNC0
質問です。
セルB2の時間から4時間5秒後の時間をセルC2に記載したいときどのようにコードを書けばいいでしょうか?
セルB2が文字や数字だとC2は""でB2が時間のときだけC2に4時間5秒足したいです。
時間を足すだけなら
range("c2").value = DateAdd("s", 14405 , range("b2")
)と書けばいいのは解るんですが、分岐処理が上手くかけません。
0482デフォルトの名無しさん (ワッチョイ 068c-0v1+)
垢版 |
2019/07/25(木) 03:58:38.58ID:lnZalLM00
VBA使わずに関数だけでやっちゃだめなの?
0486デフォルトの名無しさん (ワッチョイ 2ff9-aoqV)
垢版 |
2019/07/25(木) 11:30:00.12ID:nCaXNWq80
>>476
まあ、必要要件をまとめられないのは、何が必要かもわからないからだよな
それを知るためにも、>>466さんの言っているように専門家と契約するのが
一番コストが低く済むな
自分で作る、このスレで質問するなんて要件難しくて無理だから
0492デフォルトの名無しさん (ワッチョイ 6a57-/0C9)
垢版 |
2019/07/26(金) 10:59:45.98ID:nW8IFIW60
ExcelVBAのユーザーフォーム上で、PDFを表示、操作をしたいです。
ですが、ユーザーフォームにコントロールを追加しようとすると、
「要素が見つかりません」とダイアログが表示され出来ません。
どなたか解決策をご存じの方がいましたら、教えていただけますでしょうか。。

Acrobat pro DCはインストールしてあり、ExcelはOffice365を最新の状態で使用してます。
0494デフォルトの名無しさん (ワッチョイ 8a01-KIok)
垢版 |
2019/07/27(土) 08:56:54.14ID:4Tko0dWk0
バーコードたくさん作って印刷するプログラム作ってるんだけど
一筋縄ではいかないな
いろいろエラーが出て大変だわ
しかもステップインしながら様子みようとすると
中断モードでは入力できません
とやらのエラーがでる
回避する方法はあるようだけどめんどくさそうだ
0496デフォルトの名無しさん (ワッチョイ 8a01-KIok)
垢版 |
2019/07/27(土) 09:07:12.15ID:4Tko0dWk0
>>495
それって外部からフォント導入しないといけないやつですよね?
会社のPCでやってるんでだめなんですよね
今はこれ↓を参照して使ってます
Microsoft Access BarCode Control 14.0
重いしエラー出やすいし別の方法があればいいんですけど
0499デフォルトの名無しさん (ワッチョイ 8a01-KIok)
垢版 |
2019/07/27(土) 09:18:31.74ID:4Tko0dWk0
>>498
ありがとう
でも、そもそもネットすら自由に使えないんですよね
あと、数百個作って印刷するので、ネット経由だと時間かかりそう
お客さんがらみの情報を外に出すことに上の人が嫌がるだろうということを考えると
ローカルで終わる仕組みがないと厳しいですね
0502デフォルトの名無しさん (ワッチョイ 8a01-KIok)
垢版 |
2019/07/27(土) 09:54:25.37ID:4Tko0dWk0
>>500
セキュリティが特に厳しすぎるというよりも、意識が昭和なんですよね
人員削減されるからエクセルマクロつくるなとか面と向かって言う大御所もいるんで
とにかく目立たぬよう、些細な問題であっても起きないよう・・・と神経使うんです

今エラー回避の大きな進展があったのでなんとかこのまま組んでみます

Forで回しながらバーコードを作成・セルに配置していくんですけど
配置したセルの左上にナンバリングするコードを入れるとエラーで落ちるんですよね

バーコードを配置する処理と、ナンバリングする処理を異なるForで分けたらエラー出なくなりました
それ以外のコードは同じなんでなんだか理不尽なのですが、
理屈から攻めるより、多様なコードを試して見てどれがいけるか試して見るという
数打ちゃ当たる的な攻め方をするしかないみたいです
ステップ実行できないのがつらいですが
0505デフォルトの名無しさん (ワッチョイ 8a01-KIok)
垢版 |
2019/07/27(土) 15:48:46.00ID:4Tko0dWk0
>>504
それっぽいのかなと思ってます
起動して初回の処理は何の問題なくいけるんですけど
2回目ボタンを押して別のバーコードを作ろうとするとエラーがでるんですよね
印刷処理が終わった直後にバーコードや連番すべてを削除するコードを置いているんですけど
おそらく何かが残っているんじゃないかと思います

今の所は>>502で書いたように処理を分けることでうまくいってます
原因特定できたわけじゃないんですけどね
全削除のコード自体はそのままなので、ここに問題はないんじゃないかと思っています

ScreenUpdatingはFalseにしても以前のコードだと同じようにエラーがでますね
それだけじゃなくて、実用には耐えられないレベルで遅くなります

>>503
1.もしオブジェクトの指定が間違えているとするなら初回でもエラーがでるだるはず
2.今のコードと、バーコード配置直後にナンバリングするコードでオブジェクトの指定は同じ
なので、やはり原因とするには矛盾があるかな



最終的には、負荷を減らすために、1ページ分バーコードを作ったら
その都度印刷+全削除を繰り返すことで全て印刷するという形で組んでいこうと思っています
バッファ絡みだと嫌な予感もしますが、原因特定はできなくとも、エラー回避方法は特定できてきたのでなんとかなるかなと
0506デフォルトの名無しさん (ワッチョイ 4668-/0C9)
垢版 |
2019/07/27(土) 16:22:17.12ID:nw7YuAgg0
>>505
>ScreenUpdating
これは残念
地味に自信があったのにw

>ゴミどうこう
恐らく当たっている
vbaはGC、ガベージコレクション・・要は前の作業のゴミ掃除が貧弱

一番わかりやすいのは、新しいbookをデスクトップが同じフォルダにでも作ってそこで作業させること
コード上は色々とややこしくなるが、大分緩和される

多分一番いいのはVBS、Excel外から作って、Excelをそのたびに再起動させる事
それならまず大丈夫
0507デフォルトの名無しさん (ワッチョイ 46e9-tP4r)
垢版 |
2019/07/27(土) 17:21:27.70ID:0zw3343k0
こういう問題が出て
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)  と解答したら全て間違えてました。
解答が分からないので教えて下さい。
0510デフォルトの名無しさん (ワッチョイ 46e9-tP4r)
垢版 |
2019/07/27(土) 17:39:32.12ID:0zw3343k0
>508
そうです。でも全てバツが入ってました…。
返却されたプリントに、"セル番地(F10)についてここのみで記します"と書いてありました。
自分には意味がさっぱりですが何か分かりませんか?
0511デフォルトの名無しさん (ワッチョイ 8a02-tP4r)
垢版 |
2019/07/27(土) 17:52:14.66ID:elOLq8oK0
VBAのフォームのテキストボックス内のフォントサイズが場所によってまちまちなんですが、
どうしたら統一できるでしょうか?
因みに、
テキストボックスのプロパティ(フォント名、フォントサイズ、ボックス高さ)はすべて統一しています。
https://uploader.xzy.pw/upload/20190727174533_466d653379.png
0512510 (ワッチョイ 46e9-tP4r)
垢版 |
2019/07/27(土) 17:55:18.22ID:0zw3343k0
”ここの外で記します”と書いてあるかも知れないです。先生の字が汚くて読めない…
セル番地(F10)について、ここの外で記します。と書いてあるのでそれがヒントになってると思うのですが。

これを踏まえた上で>>507の解答お願いいたしますm(_ _)m
0514デフォルトの名無しさん (ワッチョイ 4668-/0C9)
垢版 |
2019/07/27(土) 18:04:51.46ID:nw7YuAgg0
>>510
このスレをその教師に見せろ
その教師は無能でアホだから何も分かっていない

'以下、その教師に当てる連絡

テメーより何十年も現場で使い倒してる連中が全員正解と言っている
つまらないルールがあるならそれを書け、聞いてやった上で正解を出してやるから書き込め

'連絡、ここまで
0516デフォルトの名無しさん (ワッチョイ a38e-SsL+)
垢版 |
2019/07/27(土) 18:05:26.47ID:0I7B0fTa0
>>512
死ねや、クズ
0518デフォルトの名無しさん (ワッチョイ 4668-/0C9)
垢版 |
2019/07/27(土) 18:08:26.65ID:nw7YuAgg0
>>512
お前みたいなゴミクズが言われたままに従うから教師がつけあがるんだよ
教師に「指示に従いたいが何書いてるか分からないから従えない」
といえば100%回答する
わかるまで聞け
0526デフォルトの名無しさん (ワッチョイ 0a2f-aoqV)
垢版 |
2019/07/28(日) 04:39:33.47ID:rLjNQrfA0
>>508
列の合計で。C10:E10が正解って落ちなんじゃ
0530デフォルトの名無しさん (ワッチョイ 068c-0v1+)
垢版 |
2019/07/28(日) 15:40:47.61ID:9CPL8aqE0
>>507
>>512
”ここの外で記します”だから
F10以外のセルに記する
すなわちF10以外のセルからF10を参照するにはどのように書けばいいかということじゃない?
1. $F10
2. F$10
3. $F$10
0534デフォルトの名無しさん (ワッチョイ eaa2-KIok)
垢版 |
2019/07/30(火) 10:04:06.46ID:/sOZLFOB0
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
これがエラー吐くんですがどうしてだかわかりますか?
なおコードは簡略化してあります。エラーが出るところだけピックアップしてみました。
0539デフォルトの名無しさん (ワッチョイ eaa2-KIok)
垢版 |
2019/07/30(火) 11:21:54.97ID:/sOZLFOB0
もうひとつ質問です。
エクセルは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関数を使って右の時間の部分だけとろうとしてもシリアル値がコピーされるのか、上手く行きません。
0540デフォルトの名無しさん (ワッチョイ eaa2-KIok)
垢版 |
2019/07/30(火) 11:25:40.51ID:/sOZLFOB0
なお書式設定でhh:mm:;ssとしているので見かけ上はちゃんと時間だけ表示されます。
この時間をソートしたとき頭に1900/1/1がついた時間が後ろに回りこんで困っています。
0541デフォルトの名無しさん (ドコグロ MMc2-lX5B)
垢版 |
2019/07/30(火) 12:41:51.17ID:q4AvHDZpM
>>54
> この時間をソートしたとき頭に1900/1/1がついた時間が後ろに回りこんで困っています。
そりゃ24時間超えてるんだから下に来るのは当たり前
取り敢えず簡単にやるなら
Range("d2").Value = Mod(DateAdd("s", 14405 * (cells(2, 7).Value + 1), cells(2, 3)), 1)
の様にして少数部だけにすればいい
ちゃんと知りたいなら
Excel シリアル値
あたりでググってくれ
0543デフォルトの名無しさん (ワッチョイ eaa2-KIok)
垢版 |
2019/07/30(火) 19:48:55.40ID:/sOZLFOB0
>>541
mod関数を使って余りを求める発想は恐れ入りました。
しかし、コピペで上手く動作しなかったので、シリアル値が1以上だと表示されることに注目して
if文を使って1以上ならシリアル値から−1するようにコードを書き換えました。
今のところ上手く動いてますがmod関数を使った余りを求める方法のほうが遥かにスマートなので
試行錯誤しながらmod関数を取り入れてみたいと思います。
ありがとうございました!
0552デフォルトの名無しさん (ワッチョイ 23da-7ShF)
垢版 |
2019/08/01(木) 23:23:27.20ID:nCBAvKB70
コールバック関数をどういう状況で使うのか分からないんですけど、
↓こんな状況で使う、で合ってますか?

Sub Test()

 この中で、関数Aを実行したい場合と、関数Bを実行したい場合がある。
 If文で、関数Aと関数Bを分岐するのは嫌。

End Sub
0554デフォルトの名無しさん (アウアウウー Sa09-8o7j)
垢版 |
2019/08/02(金) 00:58:24.36ID:EdsLlVlVa
依存関係を逆転するんだよ
AがBを呼ぶ場合、普通はAがBに依存するだろ?
コールバックやインターフェイスを使うことで、AがBに依存しないままでBを呼ぶことができる
それによりAを変更することなくBを別の実装Cに差し替えることが可能になり、Aの再利用性が高まる
まあVBAにはそんな小難しい概念は全く必要ないから忘れていい
0557デフォルトの名無しさん (ワッチョイ 2301-dfB4)
垢版 |
2019/08/04(日) 15:16:30.47ID:5ZS1G+AH0
・Microsoft HTML Object Library
・Microsoft Internet Controls
これらを参照したプログラムを社内で組んで使っています。

ベースとなるIE上のページにあるいくつかのリンク先から必要な情報を
とりだしてワークシートに並べるだけの単純なものです

これまでWindows7(64bit)+Excel2010だったのですが
Windows10+Excel2016に近々移行するという話が出ています

そのまま使い続けられたらいいなと思っているのですが、
何か明らかに問題となるような事項はご存じでしょうか?

自分で組んだものなので、修正はできるのですが、アクセスしにくい場所にあるので
事前に知っておくことができれば対応しやすいなと思っています
05691=”ー1”、Null=”” (ワッチョイ f5ad-zwOC)
垢版 |
2019/08/05(月) 02:53:35.25ID:nP4zzQcy0
見た目比較、柔らか比較、直観比較、なんて言うんでしょうね?
どうググればいいのか
スレチなのかどうか
VBAに限らず、C#でも結局、空文字連結が最良だった印象
でも問題にしたい基本はExcel VBA

 If A & ””=B & ”” Then

というのは、数字を1セルずつ入力すると数値になるけど、配列でまとめて入れると文字になったり
でも単純に「1」なら「1」なのだとしたい場合

ちなみにCStrはNullでエラーになるので&””の方が便利
便利だけでなく、速度も圧倒的に&””の方が速い
(ちなみにセルのTextプロパティもめっちゃ遅い)

ちなみにセルをString変数に代入してから比較する方が、&””より1〜2割速い
セルにNullを入力しても空文字になるので、セル側には使える
でも用途限定&ソース増えるので、よほどの大量処理で困らない限り、一般的には&””が安定かな

でも昔、「なんで空文字連結してるの?」って誰かに怒られたことがあり、なんとなく後ろめたい
でもテストを重ねるうちに例外に気付き、最初からやっときゃ良かったじゃんとなる

どうなんですかね?
0571デフォルトの名無しさん (ワッチョイ fdce-7ShF)
垢版 |
2019/08/05(月) 06:35:19.95ID:fZ1grq280
>>569
型変換のために空文字列を連結したり0を足すのは、ワークシート上ではよくやるけどVBAでは避けた方がいい
セルの表示内容を文字列で欲しい時はTextプロパティを使うのがセオリーだし、自分でも書いてるけどString型の変数に代入するべき
0574デフォルトの名無しさん (ワッチョイ fdce-7ShF)
垢版 |
2019/08/05(月) 13:25:50.95ID:fZ1grq280
>>573
俺が試行錯誤の末に発見したのは、IEオブジェクトのVisibleプロパティが変化するとReadyStateが更新される、ということ
だから

objIE.Visible = False
objIE.Visible = True

という2行を読み込み完了チェックのループに挿入した
あと、IEが非アクティブになるとエラーで止まることがあるので、マクロ実行中は一切さわってはいけないという制約まで付く
ここまでやって、画面がものすごい勢いで点滅するけど、一応の結果は得られるようになった
あと、Win10の次の大型アップデートでIEの動作がまた変わるかも知れないので、いつまでも使える保証がない

JavaScriptやcookieやセッションの管理などが必要なければXMLHTTPを使った方が簡単で確実
0575デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/05(月) 14:36:12.11ID:RvbOnux20
タブブラウザで新しいタブに追加する方法はあれから発明されましたか?
0577デフォルトの名無しさん (スッップ Sd43-nSnx)
垢版 |
2019/08/05(月) 18:35:15.20ID:nHSuKmq3d
今でもIEなんて使ってるのお前らだけだろ
あんたの会社はセキュリティとか気にしないんだね
0578デフォルトの名無しさん (ワッチョイ 1b68-0ks1)
垢版 |
2019/08/05(月) 18:46:21.41ID:u4C0UjsS0
>ここまでやって、画面がものすごい勢いで点滅する
なると思ったけどやっぱりなるんだ

>>577
ブラウザの解釈が必要なところはどうしてもあるんだよ
ただのスクレイピングでいいなら色々な方法があるけどやっぱりキツイ
0581デフォルトの名無しさん (ワッチョイ 1b68-0ks1)
垢版 |
2019/08/05(月) 19:55:00.01ID:u4C0UjsS0
>>569
自分一人しか見ないならどっちでも良いよ
他の人への見やすさを考えると関数の方が良い
文字列連結で考えられるのは
・仕様を検索し辛い。str()なら一発で見つかるが、文字列連結によるエラーなどはどう探していいのか分からん
・そもそも何をしているのかも分かりづらい。本来は文字列を入れるつもりだったようにも見える
・この記述でどういうエラーや分岐が発生するか不明。nullやDATE型が入ってる場合など

見た目比較
tostring = Str(1)
tostring = 1 & ""

どうしても使いたいならコメントをつけるなどした方が以下も知れないけどこれもアホらしいな
tostring = 1 & "" '文字列化
0590デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/05(月) 23:11:08.42ID:RvbOnux20
タブブラウザで新しいタブに追加する方法はあれから発明されましたか?
0592デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/05(月) 23:41:12.85ID:RvbOnux20
ウインドウが二つになってしまうんですよ。タブじゃなく。
0593デフォルトの名無しさん (ワッチョイ 23ad-zwOC)
垢版 |
2019/08/06(火) 01:47:40.96ID:jLnmJ2DC0
DOSは演算子で分かれてるんだよな
==は文字、EQUは数値
&””が高速なら、専用演算子があればもっと高速になるような
ちなみにStrCompも遅いし、Nullはエラーになる

ちなみにDOSもNull問題と似たような<ECHO は OFFです。>問題があって、
やはり”%HOGE%”==””みたいな、文字連結しながらが標準
0597デフォルトの名無しさん (ワッチョイ 75f1-xVkp)
垢版 |
2019/08/06(火) 10:15:51.32ID:AyLoeOe80
タブブラウザで新しいタブに追加する方法はあれから発明されましたか?
0598デフォルトの名無しさん (ワッチョイ ad7c-nSnx)
垢版 |
2019/08/06(火) 11:43:42.12ID:fqxmaW9H0
VBAからJavascriptを操作
0603デフォルトの名無しさん (ワッチョイ 23da-7ShF)
垢版 |
2019/08/07(水) 23:19:02.03ID:OP2ywupH0
JSObjectのaddAnnotで、PDFに注釈付けてるんだけど、
getProps → プロパティ変更 → setPropsで、
何故かtextSizeだけが反映されない。
他の、strokeColorやcontentsは反映されるのに。
何でだろう?
エラーも出ないし。
直接setPropsなら設定出来そうなんだけど、
引数の順番がわからん。
0604デフォルトの名無しさん (ワッチョイ 23da-7ShF)
垢版 |
2019/08/07(水) 23:21:30.53ID:OP2ywupH0
↑ちなみに、typeとtextSizeを同時に設定しようとすると、サポートされていない云々のエラーが出るので、
先にtypeを設定してからtextSizeを設定するようにしてる。
0605デフォルトの名無しさん (ワッチョイ 23da-7ShF)
垢版 |
2019/08/07(水) 23:49:11.47ID:OP2ywupH0
↑解決はしてないんだけど、おそらくこれしか無いだろうと思われる答えを見つけたので、一応自己解決。

ググったら、海外でも同じ現象が起きている人が何人かいて、
自動翻訳を頼りに調べたら、「そこだけJavascriptで書け」ってのが答えらしい。

なんでだよwwww
0606デフォルトの名無しさん (ワッチョイ bdad-QKcQ)
垢版 |
2019/08/09(金) 02:28:12.10ID:Sa/tT/Cw0
マウスが滑って列幅やグラフをいつのまにかズラしてしまう心配

ActiveSheet.Protect Contents:=False, UserInterfaceOnly:=True
どうも、Contents:=True にしないと列幅固定できない様子

でも Contents:=False にしないと、
ActiveChart.Axes(xlValue).MaximumScale = 100
こういうのでエラーになる
(DrawingObjects:=True は関係ないっぽい)

とりあず Contents:=False でグラフのズレだけは防止できるので列幅は諦め中
Workbook_SheetActivate で保持して Workbook_SheetDeactivate で戻すとか
そういうことはなんとなくやっちゃいけない気がする
0616デフォルトの名無しさん (ワッチョイ 691c-VaZZ)
垢版 |
2019/08/12(月) 08:16:20.47ID:rWCvfjYy0
環境の仕様上、仕方なくexcel_vbaからedgeを操作するコードを書く必要があります。
ieのようにcom?ole?オートメーションより操作する方法が用意されていないことが分かりました。

結果的にwebdriver経由以外は操作不可という認識です。
>>589の方も書かれている通りなのですが、
楽をする意味でもseleniumbasic+webdriverの組み合わせが最善なのでしょうか?
0617デフォルトの名無しさん (スプッッ Sdfa-k+MG)
垢版 |
2019/08/12(月) 08:43:02.45ID:jMLB7Ls7d
>>616
Javascriptにしとけって
なんでわざわざ難しくするのか理解出来ない
0619デフォルトの名無しさん (ワッチョイ 7df1-6/mF)
垢版 |
2019/08/12(月) 09:35:57.54ID:DZttgA6c0
Jacascriptならタブブラウザのタブにページを追加することはできますか?
0622デフォルトの名無しさん (ワッチョイ 7df1-6/mF)
垢版 |
2019/08/12(月) 10:06:01.90ID:DZttgA6c0
>>620
ありがとう。ところでVBAからJavascriptはどうやって呼び出すのですか?
0623デフォルトの名無しさん (ワッチョイ ae68-+P8T)
垢版 |
2019/08/12(月) 10:15:28.94ID:pwPFXa0Y0
>>621
回答してあげれば?

>>622
あぁ、すまん
JavaScript疑似プロトコルを使うのが楽だと思う
https://www.vba-ie.net/ie/javascript.php

「IE(InternetExplorer)のJavascriptを実行するサンプルコード」
の部分

要はURLに
javascript:〜
とjsコードを書いてページ遷移させようとするとコードを実行できる。もちろんページ遷移はしない
0627デフォルトの名無しさん (ササクッテロレ Sp85-pTyf)
垢版 |
2019/08/15(木) 08:19:26.16ID:itT4sC0lp
>>626
漠然としすぎてたので少し補足します
すでに開かれたIEで、
特定の文字列の入ったリンククリック
特定の文字列の入ったボタンクリック
ラジオボタンクリック
検索窓に文字入力
ダウンロードボタンをクリックしDL画面から保存
この流れを実行したいですどうかお助けください
0633デフォルトの名無しさん (ワッチョイ 298e-2nrJ)
垢版 |
2019/08/16(金) 03:05:47.27ID:mEybPnb20
>>631
馬鹿丸出し
0637デフォルトの名無しさん (ワッチョイ 292c-fkm4)
垢版 |
2019/08/16(金) 11:14:05.14ID:T8TNcgJH0
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
0638デフォルトの名無しさん (ワッチョイ d9ca-4tya)
垢版 |
2019/08/16(金) 12:33:15.26ID:cw5RArPO0
>>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.』と表示される場合があるという不具合が発生しています」

『表示される場合がある』だから、マクロを作りまくってるところは確認が大変だろうねぇ
0650デフォルトの名無しさん (ワッチョイ 292c-fkm4)
垢版 |
2019/08/17(土) 11:27:09.01ID:A2kuY6Eb0
VB6、VBA、VBScriptの不具合の件、MSが対応策を取ったことで>>637の2ページも更新された。
Windows7はKB4517297、Windows8.1はKB4517298を手動ダウンロード後、適用で修正。
Windows10は、v1903/v1809/v1803が8月下旬、v1703/v1607/v1507は数日中の修正予定。
v1709のみ8月17日公開のKB4512494で修正された。
0652デフォルトの名無しさん (ワッチョイ 517c-yBk9)
垢版 |
2019/08/17(土) 15:54:42.36ID:iIHdaZG00
VBAでもPythonでもないなら何を推奨してるんですか?ExcelマクロはVBAでやるしかないんだけど。Excelを使うなってことかな。
0653デフォルトの名無しさん (ワッチョイ 2946-g2bq)
垢版 |
2019/08/17(土) 15:55:45.89ID:HLb3E5lg0
質問です。以下のように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
'----------------------------ここまで--------------------------
0656デフォルトの名無しさん (ワッチョイ 2946-x+FD)
垢版 |
2019/08/17(土) 16:52:36.35ID:HLb3E5lg0
>>654-655
なるほど、一行だとpersonが一つしかインスタンス化されてないからコレクションの中身が全部
同一のpersonを指していたのですね、、
またDimの仕様も初めて知りました
VBA特有なのでしょうかね
ありがとうございました!
0657デフォルトの名無しさん (ワッチョイ 5994-OqLs)
垢版 |
2019/08/17(土) 19:14:32.76ID:RXxx1rXC0
VBAなんて死亡で何も問題にない
やっと消えてくれて良かったよ
MSグッジョブ!
0658デフォルトの名無しさん (ワッチョイ 4901-yBk9)
垢版 |
2019/08/17(土) 20:27:14.12ID:TTG1tsty0
>>657
VBA使わなかったらExcelは何を使って動かすの?
0659デフォルトの名無しさん (ワッチョイ 1342-DuLZ)
垢版 |
2019/08/17(土) 20:50:19.45ID:N2s/0hZJ0
夢と情熱で動かせばいい
0662デフォルトの名無しさん (ワッチョイ 517c-yBk9)
垢版 |
2019/08/17(土) 21:32:02.44ID:iIHdaZG00
事務職がある限りExcelはあるし、事務員はPython出来ないからExcelマクロしかない。VBだから安くて済むのに事務員もPythonやるようになれば給料が高騰するな
0663デフォルトの名無しさん (ワッチョイ 13da-g2bq)
垢版 |
2019/08/17(土) 21:42:22.66ID:Fw+V3P9r0
>>646
待つのはこんな感じ。

Do
 戻り値 = FindWindow(ダイアログのクラス名, ダイアログのキャプション)
 Sleep 1000
Loop While 戻り値 = 0

>>636みたいな嫌がらせをうけたら誤爆するけど、まあ普通はないでしょう。
0665デフォルトの名無しさん (スップ Sd73-OqLs)
垢版 |
2019/08/18(日) 11:09:28.84ID:4FW1F7ZHd
エクセルに古臭いVBAしかない理由って知ってる?
アップデートもなけりゃ最新言語に対応もしない本当の理由知ってるか?
0667デフォルトの名無しさん (スップ Sd73-OqLs)
垢版 |
2019/08/18(日) 11:40:45.27ID:4FW1F7ZHd
マジィ?
0669デフォルトの名無しさん (スップ Sd73-OqLs)
垢版 |
2019/08/18(日) 12:20:01.35ID:VmB6zVS1d
鮫島よりペルシチェネンコ事件だろ
0670デフォルトの名無しさん (ササクッテロラ Sp85-yBk9)
垢版 |
2019/08/18(日) 12:21:49.45ID:bLuo7bGBp
>>665
Excel自体にそこまで需要がないから。最新言語を対応させても得られる利益は変わらない
0673デフォルトの名無しさん (スップ Sd73-OqLs)
垢版 |
2019/08/18(日) 13:22:03.41ID:fr36iN96d
VBAに需要がないのは間違いない
誰にも必要とされてない
お前らの独りよがり
じゃなきゃコミュニティも盛り上がるはずだけど全く超低空飛行
0674デフォルトの名無しさん (ササクッテロラ Sp85-yBk9)
垢版 |
2019/08/18(日) 13:31:43.08ID:bLuo7bGBp
Excelマクロなんて事務員くらいしか使わない。マクロを使わなくてもいいようなシステムを開発したらいいだけ。企業はマクロよりRPAを使うようになってきてる。
0675デフォルトの名無しさん (ワッチョイ 1301-vqjO)
垢版 |
2019/08/18(日) 14:20:33.70ID:/SWswUk70
末端の人がパーフェクトに便利さを感じられるシステムを
会社が構築してくれたらいいんだけど
実際はそういうわけには行かないわけで
隙間をうめるためのお手軽自動化ツールとしてVBA使う事になる
うちではそうだわ
VBAがなかったらクソくだらない作業を手作業でちまちまやらないといけなくなる
0676デフォルトの名無しさん (ワッチョイ 1394-OqLs)
垢版 |
2019/08/18(日) 14:49:48.58ID:IrH+YuBi0
VBAなんて使わない方法を考えたら?
もう世間は誰もVBAなんて見向きもしてないから現状はこうなんだよ
いつまでも昔のやり方を変えないのもどうかと思いますよ
時代に合わせよう
0682デフォルトの名無しさん (スップ Sd33-OqLs)
垢版 |
2019/08/18(日) 17:09:34.94ID:VGD+ydi8d
クソ言語にしがみ付くなって
VBAなんて将来性もゼロの全く価値のない子供向けのお遊びコード
0688デフォルトの名無しさん (ワッチョイ 291a-b/Zd)
垢版 |
2019/08/19(月) 18:24:33.37ID:YB9Wg1qd0
ExcelもPythonで動かせるようになるんでしょ?
0691デフォルトの名無しさん (スップ Sd33-OqLs)
垢版 |
2019/08/19(月) 19:11:40.32ID:I77Hqr4od
無理
そんな事が出来るなら今どきVBAなんて使ってない
0695デフォルトの名無しさん (ワッチョイ 1301-wrC8)
垢版 |
2019/08/19(月) 19:56:47.47ID:kG35/yIv0
>>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.
0698デフォルトの名無しさん (ワッチョイ 1394-OqLs)
垢版 |
2019/08/19(月) 21:10:37.00ID:hlBLM62K0
今出来てない奴の典型的な言い訳だな
0700デフォルトの名無しさん (ワッチョイ 517c-yBk9)
垢版 |
2019/08/19(月) 22:38:19.44ID:yJROWsyT0
VBAが出来ればPython簡単でしょ。プログラミング何も知らなくても一か月あれば覚えれるし!
0703デフォルトの名無しさん (ワッチョイ 4901-Bu6k)
垢版 |
2019/08/19(月) 23:06:13.11ID:/B6DUDSo0
初心者質問ですいません。
下のコードで、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))
0708デフォルトの名無しさん (ラクッペ MMa5-Bu6k)
垢版 |
2019/08/20(火) 10:43:23.94ID:Lb9pYe6wM
すいません、もうひとつ助けて頂けると嬉しいです。

ActiveChart.FullSeriesCollection(1).Name = Worksheets("シート2").Cells(3, 3)

で、参照先のセルにはユーザー定義にて"8月19日"のように◯月◯日形式で表示させていますが、
グラフ凡例には2018/8/19のように表示されてしまいます。

凡例にも参照先のセルと同じように◯月◯日形式で表示させる事は可能なのでしょうか?
0712デフォルトの名無しさん (スプッッ Sd33-OqLs)
垢版 |
2019/08/20(火) 19:07:42.10ID:a4NGfQR+d
この程度の事も解決出来ないなんてセンス無さすぎだから職を変えた方が良い
0719デフォルトの名無しさん (ワッチョイ 298e-2nrJ)
垢版 |
2019/08/21(水) 16:13:42.94ID:DR/m4EzU0
ID:3vArKtvAM

ゆとりの馬鹿は早く死ね
0720デフォルトの名無しさん (ワッチョイ 41ce-g2bq)
垢版 |
2019/08/21(水) 16:17:07.75ID:fu57+dJz0
>>716
「.net」ドットネットというのは便利な関数がめちゃくちゃたくさん入ってる箱
マイクロソフトががんばって作った

それがVBから一発で呼び出せるように準備されてるのがVB.net
別にVBAからでも使おうと思えば使えるけど調べるのが大変
0729デフォルトの名無しさん (ワッチョイ 8b2c-fkm4)
垢版 |
2019/08/21(水) 22:58:52.93ID:6FMyMBWp0
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が優勢。
0731デフォルトの名無しさん (ワッチョイ 517c-yBk9)
垢版 |
2019/08/21(水) 23:17:16.37ID:ou2s2vhN0
事務職がPythonやり始めたら自分でシステム作って回せるからシステム屋なんていらないよね
0735デフォルトの名無しさん (ワッチョイ faad-R8Nh)
垢版 |
2019/08/22(木) 12:34:15.51ID:MtNZNIvl0
そういう問題じゃないな
インフラこそ企業による差異もなく誰がやっても同じで雑事として他人任せでいいもの
経験値がないとスパゲッティ化して要件変更に対応できなくなったり、直せなくなったり
あるいは処理速度、使いやすさ(業者にも上手い下手あるが)
そもそも業務要件自体がSEが入らないと整理できなかったり、入って初めて抜けが発覚したり

「作れるか否か」と「言語仕様」に相関があると思ってるのが素人
もし「作れる」なら、他の言語でも作れたはず
0736デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 12:59:21.66ID:+daqT/kh0
5Gになるとハードとかネットワークとかクラウドで利用出来るようになるから、個々でハードを所有する必要がなくなってくるんでしょ
簡単なシステムはコーディング不要でドラッグするだけで出来る物になるらしいじゃん
0738デフォルトの名無しさん (ワッチョイ cd32-CeWy)
垢版 |
2019/08/22(木) 16:49:43.11ID:e9q5rHyL0
VBAでは函数は呼び出すところより後に置く必要があるの?
C言語では呼び出すところより前に置く必要があるのに。
0742デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 20:53:37.47ID:+daqT/kh0
個人でPCを所有する時代も終わるし、全部クラウドで出来るから、AI作れるくらいじゃないと稼げなくなるよ

VBAなんか動けばなんでもいいんだよ。自分のルールでやればいい。
勉強しても事務職が自動化されてExcelももうすぐ終わるし無意味。
0743デフォルトの名無しさん (ワッチョイ fa42-atfx)
垢版 |
2019/08/22(木) 21:04:36.03ID:/rs88TGh0
いつかはそうなるかもしれないけど今は違うんで
0745デフォルトの名無しさん (スフッ Sd9a-t/39)
垢版 |
2019/08/22(木) 21:18:50.86ID:gvlSFTC4d
全くVBA触ったことない人間です
以下の内容ってVBAで実行可能でしょうか?
できるなら独学で地道にやってみようかなと思っていまして…

■現状
サイトから売上データをDLし、指定のシートにコピペ×10サイトほど

■やりたいこと概要
データDLだけでも自動化したい

■やりたいこと詳細
1.サイトにログインする(ID・パスを入力)
2.必要項目をプルダウンやチェックボックスから選び、CSVダウンロードボタンを押してデータをフォルダに格納する(あるいはVBAとおなじエクセル内にシート別でコピペ)

できるかできないかだけでも教えていただけませんか…?
0746デフォルトの名無しさん (ワッチョイ 7a01-gQHD)
垢版 |
2019/08/22(木) 21:21:39.93ID:UEI1uExP0
VBAってメインのシステムを補って、カバーしきれなかった隙間を埋めるものっていう認識があるわ
おれが作ったプログラムで一番重宝されてるのが
メインのシステムを使うに当たってミスした場合、数百の修正を手作業で一時間以上かけて
しなければならなかったものを10分程度で終わらすことができるようにしたものだわ

メインのシステムは本社レベルで作られているものだから俺のいる地方支店ごときが
口出しできるようなものじゃない
でもVBA使えば工夫次第で補正できる
0747デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 21:34:47.45ID:+daqT/kh0
>>744
先を見て他の事を学べって事だよ。ずっとこの処理方法なんでとか言ってるアホなお局と同じだぞ。
0748デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/22(木) 21:38:29.30ID:+daqT/kh0
>>745
出来るよ。PythonとかJavaScriptでも出来るし、RPAならもっと簡単に出来る。VBAでマクロ作るのに2時間かかるとしたら、RPAならそのマクロなら10分で組める。
0750デフォルトの名無しさん (ワッチョイ ce8c-F52R)
垢版 |
2019/08/22(木) 22:04:42.34ID:7qmldPJo0
RPAっておいくらのRPAの話なのかな
0752デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/22(木) 23:05:11.29ID:8fzFyZRc0
>>751
馬鹿に言っても無駄
0753デフォルトの名無しさん (ワッチョイ 7a2c-3Uq+)
垢版 |
2019/08/22(木) 23:40:59.76ID:bojKrn/j0
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 # ボタンを押す
0757753 (ワッチョイ 7a2c-3Uq+)
垢版 |
2019/08/23(金) 00:51:38.55ID:FLxS3jQ80
Excel, VBScript, PowerShell などで、IE を自動操作できたっけ?

そもそも漏れは、有料のExcel を持ってないからw
0763デフォルトの名無しさん (ワッチョイ 7a79-BXNL)
垢版 |
2019/08/24(土) 14:52:42.02ID:PMKXSgkW0
VBSだけでInternetExplorer.Applicationからかなりの事ができる
ただしIEに対応してないサイトでは使えないので今からやるならpythonとか使った方が良い
それとExcelとは何の関係もない
0764デフォルトの名無しさん (ブーイモ MM9a-STjI)
垢版 |
2019/08/24(土) 17:07:42.16ID:YNEEa1VEM
1と2行目の間に新たに行を挿入し、
そこに別のセルからデータを貼り付ける。
という作業を行いたいです。

相対的に記録することによって、
作業したい行の1列目のセルを選択した状態でマクロを実行すると望む動作ができるマクロを作れました。

これを1から2000行目くらいまで繰り返したいです。

現状は、
1行目を選択してマクロ実行、
3行目(間に行を入れたので、元2行目です)を選択してマクロ実行、
と手動でやるしかない状態です
よろしくお願いします
0766デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/24(土) 19:46:04.47ID:tfdPm5hj0
「1から2000行目くらいまで」
こういう書き方しかできない頭の出来を治せばできるよ
0768デフォルトの名無しさん (ワッチョイ fada-lNpu)
垢版 |
2019/08/24(土) 20:56:51.54ID:uDF3Dyif0
PDFから文字を抽出する時、
PDTextSelect.GetTextだと文字化けすることがあるんだけど、
文字化けしない方法ない?

素直にWordかExcelに変換しろよって思うだろうけど、
レイアウトがアホたみいなPDFなので、
AcroExCh.HiliteListで座標を調べながら抽出したい。
0769デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/25(日) 00:24:58.63ID:0CQCtKXC0
>>768
エンコーディングに問題があるために正常に文字列として抽出できない状態です。
PDF変換をOS XのQuartz経由で行っているのが原因でしょう。
画像に変換してからテキスト抽出するのがいいでしょう。
0770デフォルトの名無しさん (スププ Sd9a-MGS/)
垢版 |
2019/08/25(日) 08:41:11.09ID:OUvv1Qufd
そんな事をVBAでする必要ある?
お前らが良く言う適材適所はどうなった?
0771デフォルトの名無しさん (ワッチョイ fada-lNpu)
垢版 |
2019/08/25(日) 09:59:52.06ID:vWh3PKjN0
>>769
いや、書式ごとコピーすれば文字化けしないから、
取り出し方の問題だと思ってる。

>>770
何ならいいの?
会社のだから、好き勝手インストールできないので、
VBA、VBS、JSくらいしか選択肢無いんだけど。
0774デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/25(日) 12:11:56.92ID:0CQCtKXC0
Excelに落とし込むならVBA。事務の現場ではでjsをメンテできる人は少ないから会社では使えない。
VBAでやる必要があるかというよりも、システムに頼むと金も時間もかかるし、環境的にExcelしか使う方法がないという感じだよ。
0778デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/27(火) 21:43:59.58ID:12PwAtNh0
Excel VBAだけでDBの構築って出来ますか?出来るとしたらどんな方法がありますか?
0783デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/27(火) 22:19:55.46ID:OQSCjaIT0
馬鹿にマジレスか
0784デフォルトの名無しさん (ワッチョイ 21cf-Q35w)
垢版 |
2019/08/27(火) 22:55:47.76ID:6Z6gO9EQ0
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プロシージャ内部ではセルの背景色を変えるなどの処理は出来ないのでしょうか?
0785デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/27(火) 23:05:57.02ID:12PwAtNh0
初心者で申し訳ないんですけど、Excelだけだとシートにテーブルを作って、VBA でデータ入力したり、更新したりするってことなのかな
DBっていうとAccessとか使うしかないってこと?
0791デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/28(水) 00:58:46.20ID:5ekiJuZi0
>>790
ありがとうございます!これのことだと思います。調べてみます
0794デフォルトの名無しさん (スプッッ Sd9a-MGS/)
垢版 |
2019/08/28(水) 10:32:02.44ID:i0zGkAfmd
Excel以外は会社の縛りで入れちゃダメって設定だったろ?
0796デフォルトの名無しさん (ワッチョイ cd9b-iCeB)
垢版 |
2019/08/28(水) 12:15:47.11ID:2Ou8kvzb0
>>792-793

Cells(1, 1).Interior.Color = vbRed を

Cells(1, 1).Font.Color = vbRed

にすればちゃんと動くんだがなあ

残念
0800デフォルトの名無しさん (ワッチョイ fa94-MGS/)
垢版 |
2019/08/28(水) 20:25:09.97ID:ljeEb3Lh0
DBと言われてaccessだと思う人って少ないよね
0810796 (ワッチョイ 619b-4hip)
垢版 |
2019/08/29(木) 09:59:11.11ID:VCulxt3G0
> Cells(1, 1).Interior.Color = vbRed を
>
> Cells(1, 1).Font.Color = vbRed
>
> にすればちゃんと動くんだがなあ

と書いたが、Excel2007だとダメだな
やっぱFunctionプロシージャ内でセルの状態を変化させるのはご法度ということか

>>798
SetTimer調べてみたけど想像も付かん
良ければ教えて下さい
0811デフォルトの名無しさん (ワッチョイ 1b8c-OHvC)
垢版 |
2019/08/29(木) 11:59:18.65ID:5gorWdce0
>>796
>>798
どういうこと?
具体的な例をにfunctionから貼ってくれ
0813デフォルトの名無しさん (アウアウクー MMdd-5cq7)
垢版 |
2019/08/30(金) 09:41:25.60ID:Jl3VomiYM
相互参照をアクティブにする方法はどうしますか?

book1でbook2のとあるセルの値を取得、
book1でその値を元に計算した結果のセルをbook2で参照して取得したいです。
両方のブックを開いてるとリアルタイムで連動しますがbook1を閉じるとbook2が連動しなくなってしまいます。

何とかしてbook2だけ開いてても動くにはどうすればよいですか。
0814デフォルトの名無しさん (オッペケ Sr5d-T2DV)
垢版 |
2019/08/30(金) 09:56:38.22ID:GG5C7GdFr
csvから特定のカラムを取得してレポート用資料作成をしたいです
それぞれ値を取る際にFormatしたり、キーを取って別シートを参照して値取ったりしてますここらへんをfunctionで纏めて呼び出し元に返したいのですが、複数の意味ある値を返す際どういった形式にするのが良いのでしょうか
リストだと煩雑すぎますし利用する際に中のデータ構造を正しく理解する必要があるので辛いです
0815デフォルトの名無しさん (ワッチョイ a991-cmxz)
垢版 |
2019/08/30(金) 10:17:51.52ID:PgWDE7Wr0
>>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
0818デフォルトの名無しさん (アウアウクー MMdd-5cq7)
垢版 |
2019/08/31(土) 09:16:24.02ID:4NYR4ZtbM
>>817
相互参照だから開いてない方のbookの値が更新されないんです

【book1】
A1=book2.A1
A2=A1*2
【book2】
A1=1
A2=book1.A2

こんな感じになってて、book2だけ開いてる状態でA1を2にしたらA2が4になるようにしたいです。
0820デフォルトの名無しさん (ワッチョイ 619b-4hip)
垢版 |
2019/08/31(土) 09:39:57.73ID:VV+Xb8B+0
VBAは奥が深くて面白いね
でもすでに同じ構文のVB6が終了して19年
いつまでExcel VBAは前世紀の言語仕様で戦い続けるんだろうね
0822デフォルトの名無しさん (アウアウクー MMdd-5cq7)
垢版 |
2019/08/31(土) 10:01:54.51ID:4NYR4ZtbM
>>819
こんな感じにデータベースファイルみたいなのが100個くらいのbookに分かれてるんですよね
それを1個のbookで参照・集計してアナライズしたいんですけど
自分で書いててアレなんですけどやっぱ明らかにexcelでやることじゃないんですよねーwwもうどうしようかしらん
0823デフォルトの名無しさん (ワッチョイ 0101-aCR/)
垢版 |
2019/08/31(土) 12:03:18.46ID:lSinYyRY0
>>820
デカくて潰せない会社と同じ
批判はあっても存続
他言語導入でも併存

他言語になっても、新たに覚え直す程の魅力がなければワザワザ移行しない
そんな言語があるとも思えない
0824デフォルトの名無しさん (ワッチョイ d168-7DQc)
垢版 |
2019/08/31(土) 13:10:01.15ID:VMH9fC9A0
もう既に基本的なことはpythonのopenpyxlで叩く方が楽だけどなw
0828デフォルトの名無しさん (アウアウクー MMdd-5cq7)
垢版 |
2019/08/31(土) 14:33:22.19ID:4NYR4ZtbM
>>827
book1に1日目のりんごとみかんの売り上げ個数が書いてある
book2に2日目のりんごとみかんの売り上げ個数が書いてある

book3で1日目と2日目のりんごとみかんの売り上げを表示したい、またbook3で書く売り上げに用いる消費税というパラメータを定義してある

こんな構成の時ってどうすればいいの?
今はbook1とbook2でbook3の消費税パラメータを参照して計算して、book3で計算結果を吸い上げてる
0831デフォルトの名無しさん (アウアウクー MMdd-5cq7)
垢版 |
2019/08/31(土) 14:58:39.86ID:4NYR4ZtbM
>>829
例えなので、実際は単価が上がることはなく、種類は100種類程度のデータです。
book3で全日付のデータ吸い上げて1日の売り上げ個数をbook3の別シートに仮保存して計算というのもしましたが、
日数分だけシートが増えてくので、。
欲しいのは売り上げ金額だけなので、無駄なデータは増やしたくないのですが・・
0840デフォルトの名無しさん (ワッチョイ 297c-xYIX)
垢版 |
2019/08/31(土) 21:44:06.08ID:uJ0dNnnu0
>>837
日報と同じファイルに単価とか共通の固定データ用のシートを1個作る
日報がどんなレイアウトか知らないが↓みたいなのと仮定する
      8/1 8/2…
 りんご 
 みかん
sumifで1日分の個数を取得×Vlookupで単価取得
個数のファイル名はyyyymmddとかにして数式コピペできるようにしとく
0842デフォルトの名無しさん (ワッチョイ 618e-H6Z7)
垢版 |
2019/08/31(土) 23:13:48.46ID:E/xtib8g0
>>833
死ね、クズ
0844デフォルトの名無しさん (ワッチョイ 1379-uxNz)
垢版 |
2019/09/01(日) 04:01:41.09ID:raK4RKwa0
コピーはCtrl+Cだけとは限らないからクリップボードを監視して
対象のシートがアクティブな間に状態が変わったら選択セルに色を付けるだけ
個人で使うだけなら適当でいいんじゃないの
0848デフォルトの名無しさん (ワッチョイ a9ca-MOQs)
垢版 |
2019/09/03(火) 18:00:40.88ID:MrrInpM90
今日、Excelの表で手動でソートしてたら変な挙動が現れ、原因が分からず困ってしまい…

まず、「状況」列に、「完走」と「未達成」のデータがあるのですが、
この列を昇順ソートすると、「未達成」の上と下に「完走」が分かれてしまいました
もちろん降順ソートも同様です

で、この上下の「完走」を別のシートにコピペで貼り、挙動をチェックしてみましたが…
 https://i.imgur.com/FXwnn0h.jpg

上のリンクでも書いていますが、文字自体はif文でもフィルターでも同一扱いです
(ソートの時だけ、なぜか違いが出ています)

思い当たる違いは入力の仕方で、手打ちしたものとマクロ(VBA)で入力した違いがあります
マクロを作って以降はマクロで入力してますが、それ以前のデータは手打ち&コピペで入力しました

とりあえずの対処法として、マクロで入力した文字を全てにコピペすればこの問題は解決しますが
今後のこともあり、なにか見落としている点や抜本的な対策がないか、
何かアドバイスを頂ければと思い質問しました。

なお、これは仕事とかじゃなくて趣味でやってるものです
あと、使ってるのは Excel2007 で、ちょっと古いバージョンです

以上、よろしくお願いします
0850デフォルトの名無しさん (ワッチョイ a9ca-MOQs)
垢版 |
2019/09/03(火) 19:03:22.22ID:MrrInpM90
>>849
それでした!

「Excel、ソート、ふりがな」でググると出てきました
https://whiteleia.com/%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB-%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88-%E3%82%BD%E3%83%BC%E3%83%88-%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84-%E6%BC%A2%E5%AD%97/

Sortオブジェクトで並べ替えを実行する
http://officetanaka.net/excel/vba/tips/tips148c.htm

いろいろ見てみると、Excelでソートをする際の(隠れた?)重要事項のようですね
(見えない「ふりがな」で漢字も正しくソート!、親切な機能ですが…やめてくれ〜!!)
0855デフォルトの名無しさん (ワッチョイ 138a-SEqO)
垢版 |
2019/09/04(水) 04:06:51.76ID:5yA34Y3d0
俺ならorder byでソートするわ。
0856デフォルトの名無しさん (ワッチョイ 138a-SEqO)
垢版 |
2019/09/04(水) 04:06:51.76ID:5yA34Y3d0
俺ならorder byでソートするわ。
0857デフォルトの名無しさん (ワッチョイ 138a-SEqO)
垢版 |
2019/09/04(水) 04:10:04.07ID:5yA34Y3d0
あ、勝手に2回書き込まれた。
2回押したわけじゃない。(時間が同じ)
0859デフォルトの名無しさん (スッップ Sd33-SEqO)
垢版 |
2019/09/04(水) 09:41:13.02ID:1XDrwIL8d
それ何の意味があるの?
0861デフォルトの名無しさん (ワッチョイ 618e-MFs0)
垢版 |
2019/09/04(水) 22:19:41.54ID:ypD8R0G80
>>860
お前にはできないだけ
0870デフォルトの名無しさん (ワッチョイ c242-lFt8)
垢版 |
2019/09/05(木) 21:39:34.16ID:r8X2uJ+M0
大事なことなので
0876デフォルトの名無しさん (ワッチョイ 45ce-fUZA)
垢版 |
2019/09/06(金) 01:25:28.43ID:FBYj/dPB0
>>868
方法はいくつもある
無料のWebAPIもあるし、コマンドラインでnkfを呼び出したり、テキストボックスのプロパティをいじったり
あとは理由、目的、条件などをはっきりさせてくれないと話の続けようがない
0877デフォルトの名無しさん (スッップ Sd62-lqLo)
垢版 |
2019/09/06(金) 09:13:01.42ID:O65UzHn9d
参照とかAPIとか事務のおばちゃんには難しいのでは?
VBAを使う理由って何もさせてくれない設定だったよね?
0879デフォルトの名無しさん (アウアウクー MMb1-2buT)
垢版 |
2019/09/06(金) 12:46:48.43ID:ahR83v0/M
・2列の一致する組み合わせを数える方法(ex.A列に野菜B列に果物が書かれている時AがトマトかつBがりんごの行をカウントしたい)

・数式の結果の文字の先頭を色付けする方法(ex.A1セルに【=IF(条件式,"☆優先","▽後回し")】が入力されていてその結果の文字の先頭の記号だけを色付けしたい)

この2つのやり方教えてください。
0881デフォルトの名無しさん (スッップ Sd62-6jaX)
垢版 |
2019/09/06(金) 13:22:25.08ID:VV0t0tnJd
>>879
最初の方は何をしたいのか意味が分からない。
トマトが野菜かどうかはどうやって判定するの?

2番目の方は数式の結果はそのセルのValueで取れるから数式関係無くね?
VBAでやりたいのか数式でやりたいのかも不明。
0882デフォルトの名無しさん (ワッチョイ 498e-+nLs)
垢版 |
2019/09/06(金) 13:24:03.74ID:pGSSTaC/0
馬鹿の書いた仕様にマジレスか
0891デフォルトの名無しさん (ワッチョイ edca-4l5O)
垢版 |
2019/09/06(金) 22:33:33.84ID:9kCZ0fBo0
質問ですが、ExcelのワークシートとVBAとでは、日付の扱い(起点?)が異なるのでしょうか?

例えば、数字の「5」をDate型で表示すると、
 ・ワークシート: 1900/01/05
 ・VBA     : 1900/01/04
 https://i.imgur.com/8Iq99R4.jpg

このように1日ズレますが、これはどういう事なのか…、これで合ってるのでしょうか?
(Excelのバージョンは2007です)

何かアドバイスを頂けると幸いです
0893デフォルトの名無しさん (ワッチョイ edca-4l5O)
垢版 |
2019/09/06(金) 23:27:12.11ID:9kCZ0fBo0
>>892
ソースのリンク先まで貼って頂き、ありがとうございます。
シリアル値の「1」を日付で表示した場合、やはりワークシートとVBAで起点が1日ズレてるんですね

「期限の5日前までのものを抽出する」って操作をワークシートでやってたのですが
これをVBAに置き換えたら何か結果が変で…、しばらく変だったことにも気付かず…

とりあえず、そういうものと思って注意して使うしかないですね
しかし>>848のソートもだけど、いろいろ思いがけないことがあるもんですね
0894デフォルトの名無しさん (ワッチョイ 491a-Ns5W)
垢版 |
2019/09/07(土) 06:45:32.58ID:fm/7EiWw0
勤務表の作成の相談です。
以前も少しさせていただいたのですが、下記の条件で作ることは可能ですか?


1月の勤務時間160時間 週40時間
週休2日
月に1度は2連休を入れる
勤務形態の組み合わせは2種類
(1)昼8、昼12、遅8、夜12
(2)昼8、遅8、夕8、夜8
夜12、夜8の次の日は休みで無くてはいけない
昼12.遅8の次の日は昼8、昼12を入れてはいけない
勤務の希望や休みの希望は必ずその通りにしなくてはいけない
経験年数によって行える業務も違うため、どの日も均等に業務ができるように組まなくてはいけない
業務内容は☆、△、□、◇、●の5種類
0895デフォルトの名無しさん (ワッチョイ 424f-AUHM)
垢版 |
2019/09/07(土) 08:49:24.82ID:2KMAcAFx0
>>894
質問は可能かということだから答えるけど可能

コード晒せとか言うのであれば
長くなるのでここでは不向き

どんな形態の勤務表作るのかは知らないけど
ボタン押して勤務表の記載内容をチェックして
ダメならメッセージボックスでその旨表示して
ダメなセルを着色かなんかするようなイメージ?
0898デフォルトの名無しさん (アウアウクー MMb1-2buT)
垢版 |
2019/09/07(土) 11:53:44.36ID:BDfXoVwZM
879
すいません、一つ目はcountfsでやれました。
2つ目が出来ません
直接、☆優先、とだけ文字を書いたところなら先頭だけ赤くできますが計算結果の文字の一部を赤くするにはどうすればいいですか?
関数でもVBAでも何でもいいです。openpyxlでも。
0901デフォルトの名無しさん (スッップ Sd62-6jaX)
垢版 |
2019/09/07(土) 13:27:28.99ID:Go54LW7Ed
>>898
これは俺が悪かった。
数式に対してはセル内文字列の一部分に対して書式の設定は出来ないようだ。
条件付き書式で出来るかと思ったけど、条件付き書式もセル内文字の一部分に適用出来ない。

つまり、出来ないと思う。
0913デフォルトの名無しさん (ワッチョイ 9901-HBF5)
垢版 |
2019/09/07(土) 20:48:53.79ID:dPVmaXce0
(ほぼ)リアルタイムに状況見ながら各自が休みとか入れさせるのか、単に休みの希望だけオフラインで集めて、スケジュール担当者だけがシステム触るのかでも難易度が全然違う

今時やるなら前者で行ってもらいたいものだが、仕様考えながら完成まで一ヶ月でできるかも怪しい気がする
0917デフォルトの名無しさん (ワッチョイ 468c-q0Qg)
垢版 |
2019/09/08(日) 11:08:41.98ID:4P2DY/tr0
俺はセル内改行された文字列のセル内1行目だけを
フォント大きめで色を付けて強調させるマクロをよくつかう
0918デフォルトの名無しさん (アウアウクー MMb1-2buT)
垢版 |
2019/09/08(日) 11:26:28.31ID:8Qa/il9IM
それでも直接文字列でしょ?
IFで選択した文字列に使えないのが雑魚すぎる
VBAマジでアップデートしないかなぁ
今時continueするためにラベル+gotoが必要とかマジでお笑いだわ
0920デフォルトの名無しさん (ワッチョイ 9901-HBF5)
垢版 |
2019/09/08(日) 12:47:36.20ID:ZoBkg7d50
>>919
たぶん既に作ってる表は、一ヶ月分が1シートで横方向がその月の日、縦が氏名。その下に☆△等の個数な感じかな。
賢明なら、月初と月末にかかる一週間もそのシートに含めてあるか…(含めてないなら含めておくとプログラミングが楽になる)

対象が何人かわからないけど、条件を満たす候補が何十(百)もあるときどうするのか
そうなるなら、休み希望だけでなく出勤希望も可能とする。そうすると連休よりバラしたい人は休みの前後に出勤希望を入れればいい

プログラム的には、休みや出勤を本人希望か自動設定かを区別しておくこと(見た目でも)
あとは、粛々と仕様のロジックを組み込むだけかな

学校の時間割り作るのと似てるので、そっちで検索すると参考なることあると思う
0921デフォルトの名無しさん (ワッチョイ 9901-HBF5)
垢版 |
2019/09/08(日) 13:14:35.01ID:ZoBkg7d50
>>919
他には、氏名ごとに日のあとに、2連休有無、各週、月の勤務時間なども出しておきたい

まず作るのは、仕様に合った勤務割り振りになってるかチェックするプログラム
それができていれば、自動割り振りできてなくても手作業で始められるし、できたとこから随時自動化を進めていける

仕様へのリンクメモ >>894
0934デフォルトの名無しさん (ワッチョイ c242-lFt8)
垢版 |
2019/09/09(月) 19:46:17.72ID:pVdfshuY0
>経験年数によって行える業務も違うため、どの日も均等に業務ができるように組まなくてはいけない
悩みどころがあるとすればこの均等な業務とやらが明確に決まっているかどうかだな
0938デフォルトの名無しさん (スプッッ Sdc2-6jaX)
垢版 |
2019/09/09(月) 20:32:52.02ID:sEIB2HzJd
>>937
どういう風に仕事しないのか分からんが、エラーになってデバックでREPLACEが黄色になってるんだったら参照設定が壊れて、基本関数でさえ参照出来なくなる事例かな。

LEFTとかCSTRとか当たり前に使える筈のものが使えなくなった時は一番最初に疑う。
0948デフォルトの名無しさん (ワッチョイ 9f32-Nl8y)
垢版 |
2019/09/12(木) 01:26:23.25ID:8nNrznf50
>>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)それぞれにコードを入力すれば良いのでしょうか?
また、どのようなコードを入力すれば良いのですか?
0952デフォルトの名無しさん (ワッチョイ 9f8e-J3NS)
垢版 |
2019/09/12(木) 12:18:23.71ID:a4qCwAO70
馬鹿ばっかになった
0957デフォルトの名無しさん (ワッチョイ 9f94-htbz)
垢版 |
2019/09/12(木) 19:55:19.21ID:fv2PaJmE0
>>948
隣の席の事務のオバさんに聞けば?
0960デフォルトの名無しさん (ワッチョイ 7f79-j7/x)
垢版 |
2019/09/12(木) 20:44:23.48ID:igJ/H+nC0
CSVそのままだと数字しかない列を数字と読んじゃうからイマイチなんだけど
0001とか1になってまうやつね
そういうのうまく文字列として読む方法ないですかVBAで
0964デフォルトの名無しさん (ワッチョイ 7fca-tiNa)
垢版 |
2019/09/12(木) 21:44:44.92ID:kXsXiEi10
>>960
エクセルCSVデータが勝手に変わるのを防ぐ 文字列読み込み法
https://www.excelspeedup.com/csvmojiretsu/

『1 csvファイルをそのままの形で取り込む3つの方法
1.1 「外部データの取り込み」を使って取り込む
1.2 拡張子を「.txt」に変更して開く
1.3 テキストエディタで開きエクセルにコピー貼り付け』
0967デフォルトの名無しさん (ワッチョイ 1fce-Nl8y)
垢版 |
2019/09/13(金) 00:48:49.27ID:VS8vqVEc0
文字列として読み込めば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
0972デフォルトの名無しさん (ササクッテロル Sp73-gxlg)
垢版 |
2019/09/14(土) 21:23:34.27ID:ub8L35bYp
VBA出来る人はSQLも普通に使える人が多いのでしょうか?
0979デフォルトの名無しさん (スプッッ Sd9f-htbz)
垢版 |
2019/09/15(日) 07:09:56.72ID:bJ3fW1U+d
>>972
全く違うので関連性はありません
0980デフォルトの名無しさん (ドコグロ MMb3-4C4c)
垢版 |
2019/09/15(日) 08:30:42.63ID:7adf6vSwM
世の中にはSQLが書ければコマンド一発でできることをVBAで猿のようにループ回してる糞コードが山ほどあることを考えると決して無関係ではない
無関係と思いこむことで自らの無能を正当化するのはやめなさい
0983デフォルトの名無しさん (アークセー Sx73-CIVR)
垢版 |
2019/09/15(日) 10:12:56.75ID:IaPtpEN9x
スレチで申し訳ないがM言語を使える人ってどれくらいいるんかね
上司の謎采配でDB導入に待ったがかかってるからExcelでPowerQueryを組んでるんだが誰にも引き継ぎ出来なくなりそうで怖い
0987デフォルトの名無しさん (ワッチョイ ff8c-gAGy)
垢版 |
2019/09/15(日) 15:30:29.07ID:vKevM/ZS0
ExcelのM言語ってMUIMPSのことなの? それとも全くの別物?
0989デフォルトの名無しさん (ササクッテロ Sp73-KBBU)
垢版 |
2019/09/15(日) 17:58:13.89ID:k9jPpUfmp
どうしても今すぐ仕事で使いたく、無知なまま質問することをお許し下さい。
ワンクリックでセルに色が付き(塗りつぶし)、色を付けたところを再度クリック(こちらはダブルクリックが理想)すると元に戻る(白くなる)ようにしたいです。
知恵袋で近い回答を見つけたのですが範囲の指定方法が分からず。ただ、こちらは白に戻すのをワンクリックで行うため理想とは若干異なります。一応載せておきます。

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=水色、です。

難しくなってしまうようでしたら元に戻す動作もワンクリックで大丈夫です。ご教示頂けると嬉しいです。
0992デフォルトの名無しさん (スプッッ Sd9f-htbz)
垢版 |
2019/09/15(日) 18:22:27.35ID:SlyZta/Pd
アクセスをDBと思ってる人は少数だろう
0993デフォルトの名無しさん (ササクッテロ Sp73-KBBU)
垢版 |
2019/09/15(日) 18:27:50.10ID:k9jPpUfmp
>>991
ありがとうございます。beforedoubleclickに変更すると範囲指定できるようになるのでしょうか?このコードだと 1 と入力されているところが範囲指定の部分だと理解しているのですが、例えば("A1:C5")と入れてもエラーになってしまって、、
0994デフォルトの名無しさん (ワッチョイ fff7-+dKN)
垢版 |
2019/09/15(日) 18:34:44.00ID:gmNpe+SH0
>>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
0998デフォルトの名無しさん (ワッチョイ fff7-+dKN)
垢版 |
2019/09/15(日) 18:45:54.98ID:gmNpe+SH0
間違えた。元のコードは選択セルが1「列」目でなければ変更。
あとこれ、ドラッグ選択すると制限外セルの色まで変わっちゃうな。問題あれば
Target.Interior.ColorIndex = IndexCode を
Excel.Application.Intersect(Target, LimitedRange).Interior.ColorIndex = IndexCode に変えといて
1000デフォルトの名無しさん (ワッチョイ 9f8e-J3NS)
垢版 |
2019/09/15(日) 20:32:37.28ID:60BoiHy40
意味もわからずネットで見つけたコードを使う馬鹿の作ったVBA
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 83日 20時間 11分 0秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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