12/02/23 03:49:06.68
一応、私の知っている範囲でフォームから標準モジュールへ
何らかの値を渡す方法っていうのは以下の3種類しかないです。
1.パブリック変数の使用
2.フォーム上のオブジェクトの値をHide後に取得する
3.フォーム内のプロシージャからワークシートのセルや
外部のテキストファイルなどに書き出しておく
これ以外に何か方法をご存知の方、教えていただけたら幸いです。
370:デフォルトの名無しさん
12/02/23 04:20:30.93
>>369
普通標準モジュール側に通知用の関数用意しとかない?
ボタン押したときに呼んでやるの
371:デフォルトの名無しさん
12/02/23 04:41:55.92
>フォーム上に不可視のオブジェクト(チェックボックスなど)を作っておいて
>それをフラグに使うっていう手もありますが
>フォーム上のオブジェクトの値をHide後に取得する
オブジェクト=コントロールだと思ってる?
普通は、フォームにパブリックな変数定義するんじゃないかな
まあ、パブリック変数を介してるのには違いないけど
372:365
12/02/23 05:58:09.38
>>370
すごい!おっしゃるとおり出来ました。
今までフォームモジュールの中から標準モジュールのプロシージャをCallしたことがなかった
(引数も渡せないから、そんなことが出来ると思ってなくて試してもいなかった)ので、
やってみて目から鱗です。
これからはこの手でいきます。
ご指導どうもありがとうございました。
こんな感じで試しました。
[Module1]
Sub Test
Userform1.show
End Sub
Sub BtnClick
Stop '<=ここで止まった(つまりここにキャンセルの処理を書いておけばOK)
End Sub
[UserForm1]
Private Sub CommandButton1_Click
Call BtnClick
End Sub
>>371
どうもありがとうございます。
370さんにバッチリなお答えを教えていただいたので今後はそちらを使うことにします。
一応、オブジェクト=コントロールというか、
フォーム内のコントロールはオブジェクト(に含まれる)という程度の認識です。
コントロール以外で、フォーム内にオブジェクトがあるのかどうかは分かってないです。
373:デフォルトの名無しさん
12/02/23 12:29:19.07
派遣のお姉さんが毎日6時間かけて色んなCSVファイルから必要なデータを取り出して集計してExcelに整形する処理、
私がVBAで2時間位で完全自動化した時は泣いて喜ばれたし、作業無くなったお姉さんはキャビネの掃除とかして
時間潰そうとしてたけど2ヶ月後退職迫られた、プログラママジ害悪
374:デフォルトの名無しさん
12/02/23 12:44:53.20
人力でも6時間足らずで終わる仕事を2時間程度にしか短縮できないオマエさんがヘボなのか、
VBAでも2時間かかる作業を6時間で終わらせてしまう派遣のオネエさんが凄いのか、
どっちだかよくわからん話だな。
375:デフォルトの名無しさん
12/02/23 13:11:20.53
どう読んだらそうなるんだ
コーディングが2時間だろ
376:デフォルトの名無しさん
12/02/23 13:19:41.89
は?
仕様のヒアリング1時間、コーディング30分、テスト30分だろ
377:デフォルトの名無しさん
12/02/23 13:33:33.99
どう読んだらも何も本来の文脈からいったら
おネエさんの作業時間と対比するには
VBAのほうも処理に必要な時間を書くべきだろ。
もちろん、いくらなんでも人力の3倍前後にしか短縮できないってのは
ちょっとあり得ない話だから
コーディングにかかった時間なのだろうと推測はできるが
はっきりと明記されていない以上、
日本語としては前述のような解釈も十分可能だぞ。
378:デフォルトの名無しさん
12/02/23 13:42:16.29
> 私がVBAで2時間位で完全自動化した
これを、作業時間2時間で完全自動化したと読めないのは、日本人じゃ無いか、IQ70以下くらいだと思うぞ。
日本人だしIQも高いというなら、それは単なる誤読、勘違いなんだから騒ぐな。
379:デフォルトの名無しさん
12/02/23 13:45:59.83
どうでもいい事ではスレのびるのな
380:デフォルトの名無しさん
12/02/23 13:56:32.22
日本語っていうのは語順の入れ替えや語句の省略によるあいまい表現に寛容で
柔軟な構造の言語だから省略された部分に何を補完するかでどうにでも取れるよ。
>私がVBAで2時間ぐらいで(作業が終わるように)完全自動化した。
という読み方だって、
その前段で述べられている人力での作業時間と対比をなすことから考えたら自然な解釈なんだよ。
っていうことがわからないなら
それこそ日本語を勉強し直した方が良いと思う
381:デフォルトの名無しさん
12/02/23 14:12:50.78
>>380
余分な単語をそぎ落とすと「私が二時間位で自動化した」になるが、これでもまだ六時間かかる処理を
二時間位で終わらせるような自動化をしたと読むのか?
ちょっと、日本人とは思えない解釈だわ
382:デフォルトの名無しさん
12/02/23 14:28:14.55
>>377
>VBAのほうも処理に必要な時間を書くべきだろ。
はぁ?
お前のべき論なんか聞きたくもないよ。
383:デフォルトの名無しさん
12/02/23 14:32:11.51
完全自動化されるなら、別に実行に二時間かかってもいいと思うが。
(と、話を変な方向に広げてみる)
384:デフォルトの名無しさん
12/02/23 14:48:20.87
すでに述べている通り省略の仕方でどうにでもなる話だよ。
自説に都合の良い省略の仕方をされても困る。
作業時間云々のものからそういう省略の仕方ができないってことと、
元の文章がどういう省略の仕方をした結果なのかは別次元の話だからね。
で、俺は単なるべき論で言ってるわけじゃない。
前後の文脈を合わせるという方向で考えたらそうなると言ってるだけで
そうでない解釈が間違いだとは言ってない。
むしろその論理を否定されているからそうでない解釈もありだと言ってるだけ、
先に持論を押し付けたのはどちらか、冷静に判断してほしいし、
そういう論法なら日本語能力云々とかIQ がどうとかも一個人の見解にすぎない話で
だれも聞きたいと思ってないのは御同様。
385:デフォルトの名無しさん
12/02/23 15:02:01.04
よっぽど悔しいんだろうなぁ
386:デフォルトの名無しさん
12/02/23 15:07:15.34
> すでに述べている通り省略の仕方でどうにでもなる話だよ。
そもそも省略なんかしてないし。
100人読んだら、お前以外の99人は作業時間が、と取るわ。
387:デフォルトの名無しさん
12/02/23 15:16:34.11
僕の解釈論はそろそろ終わりにしてもらえませんかね。
388:デフォルトの名無しさん
12/02/23 15:51:44.33
>>386
あくまで個人の感想です
389:デフォルトの名無しさん
12/02/23 16:25:51.95
こんな普通の文章でも、個人の解釈でどうとでもなるとか言う奴が書いた仕様書見たいわ
390:デフォルトの名無しさん
12/02/23 16:30:12.44
自分の読解力のなさをわざわざ指摘してくれる人がいたというのに
逆ギレする馬鹿
391:デフォルトの名無しさん
12/02/23 16:42:03.30
往生際悪すぎ
392:デフォルトの名無しさん
12/02/23 18:27:11.41
>>384
オマエさん、ちょっとズレてるよ
393:デフォルトの名無しさん
12/02/23 19:02:53.08
傍目で見てたら論拠に基づいて発言してる人と
言葉の勢いだけで無根拠に強気なこと言ってる人の議論なんだが、
無根拠の方はそれに気づいてないってのが哀しいな。
394:デフォルトの名無しさん
12/02/23 19:15:35.72
スレが伸びてると思ってみてみたら何だこいつら
いつぞやのDB馬鹿がまた暴れてんのか?
395:デフォルトの名無しさん
12/02/23 19:52:44.07
どう解釈するのが普通か、なんて、多人数の意見を集約してみないとはっきりしない
ま、俺の主観ならあの文章なら作業時間2時間だな。俺があの文章かいて
実行時間が2時間だととられたなら書き方がわるかったと反省する
396:デフォルトの名無しさん
12/02/23 20:18:52.53
ここは質問スレ。
>>373も、難癖をつけようとして失敗した>>374も、どっちもスレチ。
397:デフォルトの名無しさん
12/02/23 20:34:13.57
スイマセン、助けてください
職業訓練学校に通ってるんだけど、諸事情で1週間ほど休んで一昨日からまた通い始めたんです、
その間に溜まったプリントを消化してて最後の一枚で訳わかんなくなってしまったんです
For~Nextのネストってのはなんとなく解ったんだけど、どう組み立てていけばいいのかわからなくなって先に進めなくなりました。
URLリンク(imepic.jp)
これなんですが、VBAに慣れた人には簡単すぎるかもしれませんがどなたか助けて下さい
398:デフォルトの名無しさん
12/02/23 20:59:33.99
>>397
Sub TEST()
Dim i as 整数, j as 整数, k as 整数
For i = 1 to ワークシート数
For j = 6 To 12
For k = 2 To 8
With Cells(j, k)
If .valueが5000以上 Then
.フォント.色=青
ElseIf .valueが2000未満 Then
.フォント.色=赤
End If
End With
Next k
Next j
Next i
End sub
399:デフォルトの名無しさん
12/02/23 21:07:02.90
>>398
訂正
With worksheets(i).Cells(j, k)
400:デフォルトの名無しさん
12/02/23 21:12:10.07
>>398-399
ありがとうございます!
そうか・・・Nextの終了順番が間違ってたのもあったのか
これでナントカ追いつけそうです
401:デフォルトの名無しさん
12/02/23 21:57:48.70
今、訓練所でvba教えでるのか。田舎だと、使う場面が少ないが
402:デフォルトの名無しさん
12/02/23 23:01:09.21
XP-2002環境です。
シートAに、2行ペア組のデータで、5万行まで埋まっています。
Dim strData(15) As String に2行のセルの値を配列に放り込んで、
シートBにパコパコ張り付けるのを全行ループしています。
だけど、必ずシートAのある行数のところで、オーバーフローとなって止まります。
別にその行のデータの型などが、特におかしいわけでは無いです。
(成功したデータをその行に貼り付けてもオーバーフロー)
もしかして、VBAで処理する行数の上限等の何か制約があるのでしょうか?
上限があるなら何か他の対策はあるのでしょうか。
それとも何か他の原因が考えられるのでしょうか?
よろしくお願いします。
403:デフォルトの名無しさん
12/02/23 23:07:53.13
>>402
IntegerをLongにしてみたらどうでしょうか
404:デフォルトの名無しさん
12/02/23 23:19:15.10
>>402
VBAじゃなくてExcel自体の行数の上限が65535行だけどそれは理解してるの?
Excel2007で100万行に拡張されたけど
405:デフォルトの名無しさん
12/02/23 23:25:17.48
>>404
5万行ってことだから問題ないんじゃないの?
406:デフォルトの名無しさん
12/02/24 00:06:59.57
>>402
5万行×8列を2万5千行×16列にしてるのかな?
407:デフォルトの名無しさん
12/02/24 01:04:56.91
Range("A1:A3").Offset(0,2)
ってやったら、
Range("C1:C3")
なオブジェクトが取れると期待してたけど、
Range("C1")
の単一のセルなオブジェクトになった。
そう言うもの?何かへんなのか?
"A1:A3"は、結合してるセルなのだけど、何か関係ある?
408:デフォルトの名無しさん
12/02/24 03:41:06.42
>>407
Offsetは左上の単一セルしか見ない
範囲を広げるにはResize
409:デフォルトの名無しさん
12/02/24 07:09:13.61
>>403
ありがとうございました。intカウンターをLongで解決。
なんで32000行あたりの特定の数字でオーバーフローしちまうのかなぁ
410:デフォルトの名無しさん
12/02/24 07:28:41.30
>>409
それぞれの型には範囲ってもんがある
基本的なことぐらい知ってれやれよ
URLリンク(www.geocities.jp)
変数・定数(基礎編)
411:デフォルトの名無しさん
12/02/24 08:28:36.17
>>407
実際にRange("C1:C3")になるぞ。
そっちのPCは呪われてるのか?
412:デフォルトの名無しさん
12/02/24 19:19:10.59
>>411
>>407も
>"A1:A3"は、結合してるセルなのだけど、何か関係ある?
って書いてるけど、うちの環境で試しても
A1:A3が普通のセルならC1:C3を返すけど、
A1:A3を結合してるとC1だけしか返されなかったよ。
413:デフォルトの名無しさん
12/02/26 14:46:56.38
>>412
ちょっと気になっていろいろ試してみた
ヘルプには
>指定された範囲からのオフセットの範囲を表す Range オブジェクトを返します。
とある
ここでの指定された範囲ってのは指定したRangeじゃないし、オフセットの範囲ってのもそのRangeの範囲じゃないってことらしい
問題は、結合セルに対してOffsetをとった場合
指定された範囲=結合セルという一つの範囲
オフセット基準=指定範囲の終了地点(右下)
だとみなされるようだ
A1:A3が一つの結合セルだった場合、Range("A1").OffsetもRange("A2").OffsetもRange("A3").Offsetも同じ動作をする
普通にOffset実装したらそういう動作しそうもないから、
わざわざ結合セルに対するOFFset動作は特別な動作するように実装されてるんじゃないかな
ということで、>>407そう言うものだと思われます
だれかこの動作の公式なドキュメントしってる?
414:デフォルトの名無しさん
12/02/27 00:59:22.80
Excelファイルが読み取り専用の場合、入力できなくする方法
Excelファイルを読み取り専用で開いてるのを忘れて、
いざ保存しようとした時に読み取り専用だった事を思い出すって事ありませんか?
だったらセルのロックみたいに入力自体できなくすればいいじゃないかと
思ってはみたもののどうすればいいかわかりません。
読み取り専用推奨で保存したファイルを開いて
読み取り専用にするか訊いてきた時に"はい"の場合はセルのロック、
"いいえ"の場合はセルのロックを解除というマクロを組んでAuto_Openで動かしてみましたが、
どうも訊いてくるより先にAuto_Openが実行されているようでうまくいきませんでした。
読み取り専用で開くかどうかもマクロで組めれば解決するのかなと思いますが、やり方がわかりません。
どうにかならないでしょうか?
415:デフォルトの名無しさん
12/02/27 01:19:29.12
Workbook_Openイベントプロシージャ
416:デフォルトの名無しさん
12/02/27 07:37:36.89
マクロの記述で質問です。
B列のセルに"日本"を入力すると、
その該当するC列とD列のセルの値や文字列をクリアして斜線を入れたいのです。
例えば
B2へ"日本"を入力すると、C2~D2のセルに入っている値・文字をクリアして
自動的に斜線を入れる、
同じく
B3へ"日本"を入力すると、C3~D3のセルに入っている値・文字をクリアして
自動的に斜線を入れる、
といった感じです。
ここで
B2に対してはそれらの動作が上手くいくのですが
B3やB4以降の行に関しては上手くいきません。
例えばB3へ"日本"を入力するとC3~D3のセル内容はクリアされずC2~D2の値がクリアされてしまいます。
B4やB5以降に関しても同じくC2~D2の値がクリアされてしまいます。
417:デフォルトの名無しさん
12/02/27 07:39:07.10
上の続きです。
一応マクロの文です。
おそらく相対参照の問題だと思います。
調べて試行錯誤しましたが上手いやり方がわかりません。
Excel2003です。
どなたかご教授お願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, trg As Range
Set trg = Intersect(Target, Range("B2:B14"))
If Not trg Is Nothing Then
For Each r In trg
If r.Value = "日本" Then
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlContinuous
Range("C2:D2").ClearContents
Else
r.Offset(0, 1).Resize(1, 2).Borders(xlDiagonalDown) _
.LineStyle = xlNone
End If
Next r
End If
End Sub
418:デフォルトの名無しさん
12/02/27 07:47:41.48
> Range("C2:D2").ClearContents
それはそうだろ、としか。
419:デフォルトの名無しさん
12/02/27 08:01:13.16
Range(Cells(i,j),Cells(i+?,j+?))
でこのi,j,?を操作すれば
420:デフォルトの名無しさん
12/02/27 12:37:05.35
Range("C2:D2").ClearContents を
r.Offset(0, 1).Resize(1, 2).ClearContents
で、いけたわ
こういうのわかりにくいから、
r.offset(0.1).clearcontents
r.offset(0,2).clearcontents
ってやってるわ。
421:デフォルトの名無しさん
12/02/27 16:29:03.11
>>418-420
ありがとうございます。
削除する対象のセルを結合したセルにすると
「結合された一部のセルを~」のエラーが出てダメになりましたが
r.Offset(0, 1).Resize(1, 2) = "" にすると大丈夫でした。
お世話になりました
422:デフォルトの名無しさん
12/02/27 18:00:44.53
range(“a1“).numberformat=“@“
range(“b3“).numberformat=“hh:mm“
if range(“a1“)<>range(“b3“) then
としても差異は検出されないけれど、セルの内容全てを比較したい場合は、全プロパティ分のifを書いてやらんとあきまへんのどすか。
423:デフォルトの名無しさん
12/02/27 18:02:54.64
.text
424:デフォルトの名無しさん
12/02/27 19:26:17.07
range("a1").numberformat="#,##0"
range("b3").numberformat="#,##0;-#,##0"
値は両方とも100
この場合も違うと判定させたい?
425:デフォルトの名無しさん
12/02/27 23:40:37.48
させたいどす。
.value でも .width でも罫線でも、違いを検出したいんどすえ。
426:デフォルトの名無しさん
12/02/28 10:59:13.54
rangeのプロパティカウントさせることができないっぽい
自分で関数作るか、if文書くかしかなさげ
というか、プロパティカウントできないの初めて知ったわ
これ地味に不便ね
427:デフォルトの名無しさん
12/02/28 12:42:32.91
VISTA Excel2007 です
ライブラリの参照設定をコード内で実行したいのですが、
同じ文を標準モジュールに書くとエラーが出ないのに
クラスのイニシャライズに書くと「中断モードでは実行できません」と
エラーメッセージが出ます(ただ参照設定の処理がなされます)
クラスのイニシャライズでエラーが出る原因など分かる方がいましたらご教授ください
以下コード:
Const DAOFileFPath As String = "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"
ActiveWorkbook.VBProject.References.AddFromFile DAOFileFPath
428:デフォルトの名無しさん
12/02/28 21:31:31.36
>>427
べつに普通に実行できるが
そのエラーメッセージの通り、中断モードのままやるからエラーになってるだけだろ
429:427
12/02/29 01:03:02.92
すみません
もっと早く書き込みたかったのですが仕事で抜けられませんでした
イニシャライズでなくメソッドにしても同じエラーになったので
もしやと思い、クラスを新規作成して一からコードを手打ちしていったら
今度はうまく行きました
モジュールが壊れていたんだと思います
必ず通るはずのStopをスルーして、その先のMsgBoxが動いている時点で気づくべきでした
前にもこんなことがあって、別のモジュールに一から書き直したらやっぱり普通に動いた
そんな無茶な使い方してるわけじゃないのにな…
どうも失礼しました
430:デフォルトの名無しさん
12/02/29 02:44:05.36
いやだから、Stopで止まったら中断モード...
まあいいか
431:デフォルトの名無しさん
12/02/29 10:05:54.43
忙しすぎて日本語読む余裕がないんだろうな
432:デフォルトの名無しさん
12/03/01 00:18:08.68
すみません、どうも詰まってしまったので質問させてください
商品名の入っているシートから、数学で言う所の和集合を取りたいと考えています
例えば、
A列 B列
1 CC TT
2 HH CC
3 TT E3
となっているようであれば、(CC、TT、HH、E3)を取り出して、できれば1セルに一つの名前という形で長く並べたいと考えています
Sub Test()
Range("F8").Value = Union(Range("A1:A3"), Range("B1:B3")).Value
End Sub
おそらくUnionを使うのかなと考えて、とりあえず1セルに一つの名前ということを考えずに書いてみたのが上のコードなんですが、
実行するとF8にはCCしか入力されません。これはどこが間違っているのでしょうか?
どなたかよろしくお願いいたします。
433:デフォルトの名無しさん
12/03/01 02:13:02.97
すいません、色々試してみたら半分くらい自己解決できました。
Sub MultipleRange()
Dim rng1 As Range, rng2 As Range, myMultiRanges As Range
Worksheets("Sheet1").Activate
Set rng1 = Range("A1:A3")
Set rng2 = Range("B1:B3")
Set myMultiRanges = Union(rng1, rng2)
Dim i As Integer
For i = 1 To 6
Cells(10, i).Value = myMultiRanges(i).Value
Next i
End Sub
これだと重複ができるようなので、これやった後に重複チェックのコードを別にかければなんとかいけそうです。お騒がせしました
434:デフォルトの名無しさん
12/03/01 10:10:50.67
Excel2010 (win7 home)
Worksheets("test")の
Private Sub Worksheet_Activate()
UserForm1.Show
End Sub
と入れて Worksheets("test")のタブをクリックして表示させた時に
Userform1が立ち上がるのは確認したんですが、
ThisWorkbookのシートモジュールの
Private Sub Workbook_Open()
Worksheets("test").Activate
End Sub
としてブックの起動時にWorksheets("test")をアクティブにしても
Userform1が出てこないんですが、これはなぜ?
明示的に
UserForm1.ShowをWorkbook_Open()に入れればもちろんフォームが
出てくるんですけど、これではあまり意味がないような気がする
んですけど。
435:デフォルトの名無しさん
12/03/01 10:20:46.78
九分九厘、そのワークシートtestがブックを開く時点からアクティブなんだろうな。
ワークシートのActivateイベントは「他のシートから移動してきたとき」しかトラップされないから、
ブックを閉じるときにtestがアクティブな状態で保存されて、開くときに最初からアクティブだとトラップできてない。
試しにワークシートtest2を作って、それをアクティブにした状態で保存して開いてみ?
436:デフォルトの名無しさん
12/03/01 10:38:38.23
おおっ、即レスかつその通りでした!
ありがとうございますm(__)m
437:デフォルトの名無しさん
12/03/01 18:16:46.90
VBAで
あ 1
あ 1
を行を文字と数字に列を整えることは可能?
438:デフォルトの名無しさん
12/03/01 18:20:24.65
ちゃんとした日本語の説明か、結果のプレビューを頼むwwwwwwwwwwwwwwww
439:デフォルトの名無しさん
12/03/01 20:08:50.04
エスパーの訓練が捗るな
440:デフォルトの名無しさん
12/03/01 20:50:42.49
Excel2010(vaista)ですが
家計簿を作成してまして収入と支出の差額を表の一番右下の
セルに表示させているのですがそのセルの数字が黒字(0以上)ならセルの背景を青
赤字(0未満)ならセルの背景を赤にしたいのですが上手くできません
そもそもVBAでは不可能なので素直に条件式書式設定を毎回
使用したほうが良いのでしょうか?
441:デフォルトの名無しさん
12/03/01 22:14:39.94
条件式書式設定でできることを態々VBAでやろうとする意味が分からないんだが
442:デフォルトの名無しさん
12/03/02 00:09:42.41
Excel 2010です。開発タブをリボンに表示させる方法を教えて下さい。
2007では、「ファイル」→「オプション」で「開発タブをリボンに表示する」が
出て来るのですが。
443:デフォルトの名無しさん
12/03/02 00:15:51.44
イベントプロシージャに親プロシージャの引数をわたすことは
可能でしょうか?
444:デフォルトの名無しさん
12/03/02 00:20:12.40
>>443
おや?
445:デフォルトの名無しさん
12/03/02 00:23:55.72
今日は妙に>2すら読まない奴が多いな…
446:デフォルトの名無しさん
12/03/02 01:38:50.37
>>442
ファイル→オプション→リボンのユーザー設定→開発にチェック
447:デフォルトの名無しさん
12/03/02 12:51:59.64
ユーザーフォーム上のコマンドボタンの色を変更する目的でカラーパレットを表示させたいのですが、
どうすればいいでしょうか?
マクロに記録してから中身を見ようと思ったのですがVBAにはマクロの記録がなくて、ググっても
RGBの値を直接代入する例ばかりでよくわかりませんでした。
よろしくお願いします。
448:デフォルトの名無しさん
12/03/02 13:03:47.62
カレーパレットダイアログは搭載されてない。
自分でユーザーフォームで1から作るか、WinAPIを使って自分で実装するしかない。
お好きな方で。
449:デフォルトの名無しさん
12/03/02 13:16:57.63
>>448
ありがとうございます。
自作することにします。
450:デフォルトの名無しさん
12/03/02 13:54:58.28
パッチあてるのどうやるの?
sed -i s/hello/こにゃにゃちわ/g *.[ch]
cc *.[ch]
相当。export、import手作業は嫌です。
451:デフォルトの名無しさん
12/03/02 14:04:19.91
そんな便利なものはない。
自分でやるなら、VBComponent.CodeModule.ReplaceLine使え。
452:デフォルトの名無しさん
12/03/02 14:08:57.19
アドインにしとけ
453:デフォルトの名無しさん
12/03/02 18:23:02.19
witheventsを使うときに、コマンドボタンの1~5個めはイベントを共有して、
6~10個めはそれぞれ独自のイベントにしたい場合はwitheventのプロシージャーの
中で判断するしかないですか?
454:デフォルトの名無しさん
12/03/02 18:41:09.43
>>451
ありがとう。
var=VBComponent....Lines(...)
replace(var,“hello“,“こにゃにゃちわ“)
VBComponent....Lines=var
みたいにして絶望していた。
>>452
もう一歩教えてくだsあ。
アドインにReplaceLine()なりを書けという意味? アドインにサブルーチンの置換プラグイン相当の機能があるという意味?
455:デフォルトの名無しさん
12/03/03 16:16:57.97
シートがなくなるまで、2シートずつ選択してプリント。
Sub pare_print()
Dim i As Integer
For i = 2 To Sheets.Count
Worksheets(Array(i, i + 1)).PrintOut
i = i + 2
Next i
End Sub
できません・・・なんででしょう??(´Д⊂ヽ
プリントアウト始めのシートは2番目からです。。
456:デフォルトの名無しさん
12/03/03 16:22:32.24
複数枚のグラフをユーザーフォーム上に重ねて表示させることはできるでしょうか?
今はシート上に重ねて表示させているのですが表示場所をずらしたい時とか、全体に
拡大縮小したい時にどうすればいいかわからず、ユーザーフォーム上ならユーザーフォームを
移動、拡大縮小することによって簡単にできるかなと思ったのですが、ググっても情報がないみたいで。
よろしくお願いします。
457:455
12/03/03 16:26:48.45
どうもすみません。
最初のシート名は、0だったようです。できました。
458:デフォルトの名無しさん
12/03/03 17:14:23.39
顕正新聞 平成24年2月5日号「原発全廃特集号」
原発は日本を滅ぼす、即時全廃せよ
人のDNAを破壊、国土を居住不能にする
代替は天然ガス・コンバインドサイクルで十分
惨禍もたらすを知って推進するは犯罪
URLリンク(d.hatena.ne.jp)
459:456
12/03/03 20:56:39.14
すみません。OSとバージョンを書き忘れました。
OS:BeOS Release4 (intel版です。PowerPC版ではありません )
バージョン:Gobe Productive 1.1
引き続きよろしくおねがいしますm(_ _)m
460:デフォルトの名無しさん
12/03/04 10:36:07.81
こんにつわ、質問です。
A1-A50にランダムで指定の文字列もしくは空白が入ります。例えばリンゴ、ミカン、etcで、それぞれリンゴ...001、ミカン...050のようにあらかじめ対応する数字が割り振られています。
この文字列、つまり数字を条件に処理したいのですが、この場合A1から順に判定するよりも、A列から抽出して重複と空白を除外し、その結果を例えばB列に貼り付けて、B1からB?の空白まで処理をくり返すのが良いと思うのですが、どうでしょうか。具体的にどう書けば良いですか?
461:デフォルトの名無しさん
12/03/04 10:41:38.47
>>460
B列に貼り付ける処理が無駄
FOR EACH でA列のRANGEを処理しながら回せばよろし
462:デフォルトの名無しさん
12/03/04 10:57:16.47
thx.
RANGEが固定ではない場合の上手い方法ありますか?適当に下まで引っ張ればいいですか?
463:デフォルトの名無しさん
12/03/04 11:12:33.48
分からねえ分からねえよぉ
A列に指定の文字列ランダムに配置
B1-B50に指定の文字列
C1-C50に指定の文字列に対応する数字
があるとして、A1から順番に対応する数字をMsgboxで表示していくコード誰か書いてくれぉ
464:デフォルトの名無しさん
12/03/04 11:18:31.63
VLOOKUP使えよ
465:デフォルトの名無しさん
12/03/04 11:33:29.98
thx.
A1からセル内の数字だけ取り出すにはどうすればいいですか?
漢字/12345\/
という形式から
12345
を取り出したいです
漢字は1-5文字のランダムなので、LEFTは使えないです
数字は5桁固定で必ず\の前です
466:デフォルトの名無しさん
12/03/04 11:35:50.15
for i = 1 to 最終行
最終行の取得はお好きにどうぞ
467:デフォルトの名無しさん
12/03/04 11:38:22.77
>>465
正規表現でもLikeでもお好きにどうぞ
468:デフォルトの名無しさん
12/03/04 12:24:26.18
Dim c As Object
For Each c In Worksheets(imacat).Range("A1:A100")
If c.value Like "*##*" Then
Msg:
MsgBox "cである"
End If
Next c
ここまで出来た…
469:デフォルトの名無しさん
12/03/04 12:27:05.40
Msg:要らないな
MsgBoxにマッチした数字を表示したいのですけどできません
470:デフォルトの名無しさん
12/03/04 12:44:36.54
>>469
AHO
471:デフォルトの名無しさん
12/03/04 12:51:45.21
MsgBox c & "である"
472:デフォルトの名無しさん
12/03/04 13:00:32.31
そもそもLikeでマッチした数字返せるのけ?
473:デフォルトの名無しさん
12/03/04 13:12:38.41
>>465
instrで/と\の位置を探してmid関数を使えば?
474:デフォルトの名無しさん
12/03/04 13:19:10.28
>>463 コード書いたのでどうぞ使ってください。>>464のいうとおりVLOOKUPを使用して組んでみました。
Sub Test()
Const s = vbKeyLButton: Const e = vbKey2: Dim vlookup: Set vlookup = Application
Dim i: For i = s To e:
Dim v: v = Evaluate(Chr(vbKeyF7) & Chr(vbKeySeparator) & Chr(vbKeyDivide) & Chr(vbKeyDivide) & _
Chr(vbKeyAdd) & Chr(vbKeyF6) & Chr(vbKeyF1) & Chr(vbKeyDown) & Chr(vbKeyNumpad1) & i & _
Chr(vbKeySnapshot) & Chr(vbKeyNumpad2) & s & Chr(vbKey9 + 1) & Chr(vbKeyNumpad3) & e & _
Chr(vbKeySnapshot) & Chr(vbKey2) & Chr(vbKeySnapshot) & Chr(vbKeyNumpad6) & Chr(vbKeyNumpad1) & _
Chr(vbKeySeparator) & Chr(vbKeyF4) & Chr(vbKeyNumpad5) & Chr(vbKeySelect))
' VLOOKUPで数字をMsgBoxで表示する
vlookup.OnTime Now() + TimeValue(Chr(vbKey0) & Chr(vbKey9 + 1) & Chr(vbKey0) & Chr(vbKey9 + 1) & i), _
Chr(vbKeyRight) & Chr(vbKeySubtract) & Chr(vbKeyNumpad2) & Chr(vbKeyDown) & IIf(IsError(v), String( _
vbKeyRButton, Chr(vbKeyPageDown)), v) & Chr(vbKeySelect) & Chr(vbKeyRight)
Next
End Sub
Sub MB(v): MsgBox (v): End Sub
475:デフォルトの名無しさん
12/03/04 13:31:13.08
>>472
かえせるべ
正規表現のほうが楽だけど
str= "あいうえお12345"
strlen= len(str)
for i =1 to strlen
cha= mid(str,i,1)
if cha lile "[0-9]" then
c= c &cha
end if
next
476:デフォルトの名無しさん
12/03/04 13:35:24.62
すげー。自力じゃ無理だったので有難く使いますthx!!!
477:デフォルトの名無しさん
12/03/04 13:48:13.13
数字だけ取り出すなら
dim a
a=instrr(cells(1,1),"\")
msgbox mid(cells(1,1),a-5,5)
が簡単だと思うけど。
478:デフォルトの名無しさん
12/03/04 13:54:17.43
VBAで可視セルを扱うにはどういう機能またはプロパティまたはメソッドを使いますか?
479:デフォルトの名無しさん
12/03/04 13:57:27.36
>>478
可視セルをどう使いたいかによる。
480:デフォルトの名無しさん
12/03/04 14:04:24.13
>>479
スレリンク(bsoft板:161-番)
481:デフォルトの名無しさん
12/03/04 14:23:38.72
連続じゃないセル、たとえば、range("A1:A3")とrange("C1:C3")を3*2の配列に格納するには
どうすればよいのでしょうか?
482:デフォルトの名無しさん
12/03/04 14:35:08.42
>>477
これにしたthxx.
483:デフォルトの名無しさん
12/03/04 14:36:48.77
>>481
For~Nextで順番に代入
作業列を使ってもいいんなら一ヶ所に固まるようにセル範囲をコピーしてからVariant型に代入
B列を削除して配列にコピーしてからアンドゥ
484:デフォルトの名無しさん
12/03/04 14:37:11.44
>>481
dictionary使うとか
set dic = createobject("scripting.dictionary")
for i = 1 to 3
dic add cells(i,1)value, cells(i,3).value
next
for i =1 to 3
cells(i,5).value=dicitem(cells(i,4).value)
next
set dic=nothing
485:デフォルトの名無しさん
12/03/04 17:36:55.88
こんばんばーん、質問です。
連結されているセルにデータがあるものとして判定するにはどうすれば良い?
例えば、文字列がE1とF1をまたいでいる。セルが結合されているとき、F1にValueしても空だが、データがあるものと判定したいです。セルの結合数はランダムです。
486:デフォルトの名無しさん
12/03/04 17:45:29.93
MergeCellsで事故解決です
487:デフォルトの名無しさん
12/03/04 19:11:15.60
>>483
>>484
ありがとうございました
488:デフォルトの名無しさん
12/03/05 13:07:02.09
こんにちあ、質問です。
A1-A100に、空白セルもしくは"abc"のセルがあるとき、その行を削除したいのですが、
Dim c As Range
For Each c In Range("A1:A100")
If c.Value ="" Or c.Value = "abc" Then c.Rows.EntireRow.Delete
Next c
とすると、1度目の処理で空白行が消えて、もう一度処理するとabc行が消えます。なぜこの記述はダメなのか?一度の処理で済ますにはどう書けば良いですか?
489:デフォルトの名無しさん
12/03/05 13:28:54.49
If c.Value ="" Or c.Value = "abc" Then c.Rows.EntireRow.Delete
↓
If c.Value ="" Or If c.Value = "abc" Then c.Rows.EntireRow.Delete
490:デフォルトの名無しさん
12/03/05 14:05:09.36
エラーでますぉ
491:デフォルトの名無しさん
12/03/05 14:11:45.74
>>488
ごめんアホなこと書いた
セルを消去してるので、セルが上に繰り上がってる
A2のセルを消去したらA3のセルがA2に繰り上がるので、そのセルは評価されない。
for each じゃなくて
for i =100 to 1 step - 1
A100から 減算させて評価させればいい。
つかstepとか忘れてて ぐぐったわ・・
492:デフォルトの名無しさん
12/03/05 14:29:25.31
出来たthx!
質問です、
for i 1 to 100
文字列&i
next
とするときiが一桁のとき01のようにして&したいのですが、書き方ありますか?
493:デフォルトの名無しさん
12/03/05 14:32:02.47
Right関数使え
494:デフォルトの名無しさん
12/03/05 14:32:35.75
>>492
For i = 1 To 100
str = str & Format(i, "00")
Next
495:デフォルトの名無しさん
12/03/05 14:38:43.95
かんぺきthx!
496:デフォルトの名無しさん
12/03/05 17:41:04.96
どなたか教えてください。
Access2000からExcelファイルを生成しています。
参照設定を Excel9.0 Objectlibrary へ設定しています。
生成先のExcelは2000だったり2003だったり、を想定しています。
以下のソースは動作します。
Function EXCEL_TEST1()
'事前バインディング 必ずEXCELへの参照設定が必要
Dim appWorld As Excel.Application
Dim wbWorld As Excel.Workbook
Dim Wksheet As Excel.Worksheet
Set appWorld = CreateObject("Excel.Application")
Set wbWorld = appWorld.Workbooks.Add
Set Wksheet = wbWorld.Sheets(1)
Wksheet.Cells(5, 5) = "カキコ"
LAST_CELL = Wksheet.Cells.SpecialCells(xlLastCell).Address
MsgBox LAST_CELL
wbWorld.SaveAs "C:\hoge.xls", FileFormat:=xlWorkbookNormal
appWorld.Quit
開放処理
End Function
497:496
12/03/05 17:41:43.26
これを以下のように、参照設定せずに実行時バインディングで行ないたいのですが、
LAST_CELL(最終セルアドレス)の取得と、
SaveAsの部分が動作しません。定数の記述が異なるのか、そもそも実行時バインディング
では記述できないのかも分かりません。どなたか御教授お願いします。
Function EXCEL_TEST2()
'実行時バインディング EXCELへの参照設定が不要 ----------
Dim appWorld As Object 'Excel.Application
Dim wbWorld As Object 'Excel.Workbook
Dim Wksheet As Object 'Excel.WorkSheet
Set appWorld = CreateObject("Excel.Application") '生成
Set wbWorld = appWorld.Workbooks.Add 'ブック追加
Set Wksheet = wbWorld.Worksheets(1)
Wksheet.Cells(5, 5) = "カキコ"
LAST_CELL = Wksheet.Cells.SpecialCells(xlLastCell).Address
MsgBox LAST_CELL
wbWorld.SaveAs "C:\hoge.xls", FileFormat:=xlWorkbookNormal
appWorld.Quit
開放処理
End Function
498:デフォルトの名無しさん
12/03/05 18:03:38.27
>>496
参照設定しないと
定数 xlLastCell や xlWorkbookNormal は
参照先で定義されているから使えないと思うぞ
自前で Const定義するか 定数値を指定するかどっちかしないと
499:496
12/03/05 19:26:17.24
>>498様
有難うございます。あまり参照設定とかは経験がないものですから、
何から手を着けてよいのか分からない状態です。
constする値を調べる方法があればよいのですが。
検索が下手なせいか、なかなか参考になるサイトが見つかりません。
500:496
12/03/05 19:34:55.74
496です。解決しました。
498様のヒントで、以下のサイトを見つけました。
URLリンク(park.geocities.jp)
動かないところを片っ端から定数指定していきます。
有難うございました。
501:デフォルトの名無しさん
12/03/05 19:44:05.05
こんにつわ、質問です。
With ActiveSheet.QueryTables.Add
使ってるときに、存在しないURL,空白のURLを打ち込んだときにExcelがフリーズしてしまいます。
どうするのがよいですか?
502:デフォルトの名無しさん
12/03/05 19:44:54.64
訂正
空白のurl→空白ページのurl
503:デフォルトの名無しさん
12/03/05 19:53:56.57
URLリンク(www.microsoft.com)
何故かVBAの言語仕様書が混じってるみたいだ。
FirstReleaseが2008年なのがなんともw
504:デフォルトの名無しさん
12/03/05 19:56:19.90
win7 64bit
office2010 32bitです
画像を複数枚選択して、なおかつそれらを40%の大きさにリサイズして取り込みたいのですが、どうしても上手くいきません。どなたかご教授お願いします。
505:デフォルトの名無しさん
12/03/06 00:23:45.39
>>504
506:デフォルトの名無しさん
12/03/06 03:47:59.25
教えてください。
If A then
with B
Else
with C
End if
って動かないみたいなんだけど、他に方法ありますか?
507:デフォルトの名無しさん
12/03/06 03:53:58.23
>>506
下にEnd With が続くとエスパーして
Dim target As Withで使う型、またはVariant
If A then
Set tartget = B
Else
Set tartget = C
End If
With target
処理
End With
508:デフォルトの名無しさん
12/03/06 03:57:21.74
>>507
こんなに早く
どうもありがとうございます。
509:デフォルトの名無しさん
12/03/06 10:38:36.68
スレートPCについてるWebカメラで撮った画像を直接EXCELに貼り付けたいんですが、どんな方法があるでしょうか?
望ましいのは、ボタンクリック等のイベントで撮影モードに移行し、撮影完了でEXCELに戻ってくるような操作方法です。
510:デフォルトの名無しさん
12/03/06 11:02:50.25
フォームモジュールをインポートすると
コードの先頭行に空白行が1行追加されてるのは仕様ですか?
空白行を削除して保存しなおしても、また追加されてしまいます。
標準モジュールではそうなりません。
511:デフォルトの名無しさん
12/03/06 11:16:15.79
>>509
shellかなんかで立ち上げてsendkeyで操作するとか
512:デフォルトの名無しさん
12/03/06 11:48:06.15
イミディエイトウィンドウのバッファ容量って、もっと広げることはできないんでしょうか
途中経過を1000行ぐらい出力したら流れて消えてしまいました
513:デフォルトの名無しさん
12/03/06 20:00:16.74
>>512
そんなこと考えてないで
さっさとテキストファイルに出力して
プログラムを進めてくれ
514:デフォルトの名無しさん
12/03/06 21:08:23.50
イミディエイトって、どういう意味でいえいと?
515:デフォルトの名無しさん
12/03/06 21:16:17.49
>>514
完成したVBAマクロを試しに動かしたら、
何故かExcel巻き添えで落ちる呪いをお前にプレゼントしよう。
516:デフォルトの名無しさん
12/03/06 21:25:45.56
辞書で引いてみたら
immediate は、
広大な、恒久的な
という意味らしいな
517:デフォルトの名無しさん
12/03/06 21:42:45.76
>>516
何ていう辞書?
518:デフォルトの名無しさん
12/03/06 21:55:00.87
>>517
何だったかな
ロブスターとかだったかな
513に借りたんだけど
519:デフォルトの名無しさん
12/03/06 22:39:09.48
フィルタ結果の件数の取得は、どうすればいいんでしょうか?
520:デフォルトの名無しさん
12/03/07 00:18:02.17
イミディエイトウィンドウって
一度に100行まで表示じゃなかったけか。
ちがってたらゴメン。
521:デフォルトの名無しさん
12/03/07 00:31:03.27
>>518
元ネタがきになる
522:デフォルトの名無しさん
12/03/07 00:31:33.21
イミディエイトウィンドウは200行がMAXで不可変らしいね。
>>519
「オートフィルタ カウント」 でぐぐればいろいろ出てくる
523:デフォルトの名無しさん
12/03/07 13:57:19.01
>>516
それimmediateの意味とはちがくね?
immenselyとかimmensityの意味じゃね?
524:デフォルトの名無しさん
12/03/07 15:07:58.10
>>523
直接の~、とか 即時の~ という意味だね。
形容詞だね。
ホントどうでもいいけど
525:デフォルトの名無しさん
12/03/07 20:33:40.70
>>516
immediateはどうかんがえたって即って意味だろ
526:デフォルトの名無しさん
12/03/07 21:21:07.31
ユーザーフォームを使おうと思ったのですが、
閉じるボタンを押した時、必ずフリーズします。
何故でしょうか。
527:デフォルトの名無しさん
12/03/07 21:37:14.41
>>526
ボタンを押した時に実行されるコードを何故貼らない
528:デフォルトの名無しさん
12/03/07 21:37:33.25
>>526
壊れているのかもな
529:526
12/03/07 21:42:22.61
すみません。526です。
セルをダブルクリックで呼び出すことにしていまして、
閉じるボタン押した時、セルが編集可能状態である為エラーが出るみたいです。
(ボタンで呼び出した場合は普通に閉じれました。)
コードの中身はなく、ひとまずフォームを作った感じです。
ダブルクリックでフォーム呼び出しはやるべきではないのでしょうか。
530:デフォルトの名無しさん
12/03/07 21:50:53.38
Cancel = False
531:デフォルトの名無しさん
12/03/07 23:34:23.81
教えてください。
まず変数aに1を代入し
DO LOOPの中でaを5にしました。
その後aを使うと元の1に戻っているのですが、
これは仕様ですよね?
この5という数値を使う方法はありませんか?
532:デフォルトの名無しさん
12/03/07 23:41:52.46
>>531
仕様がないAH0
533:デフォルトの名無しさん
12/03/08 00:12:08.65
VBAの変数にループ内のスコープなんてなかったよな?
>>531
とりあえずコード貼れ
534:デフォルトの名無しさん
12/03/08 00:19:44.48
>>531
a = 1
Do
a = 5
Loop Until True
MsgBox a
535:デフォルトの名無しさん
12/03/08 00:22:36.75
>>533
すみません。質問した者です。
変数に追加していくのではなく、
毎回上書きしていただけでした・・・
初心者でごめんなさい。
' Do
' If r = 1 Then
' Exit Do
' End If
' total = Cells(r, 4)
' r = r - 1
' Loop
536:デフォルトの名無しさん
12/03/08 00:56:45.28
>>535
謎すぎるけど解決したなら、よかった
537:デフォルトの名無しさん
12/03/08 01:01:53.11
for系でないループで
中をIfとExitで制御している形はけっこう危険なんだよね。
思わぬ条件で抜けたり
一度も通らない経路ができたりする。
538:デフォルトの名無しさん
12/03/08 01:02:17.51
=LEN(A1)
=LEN(A2)
=LEN(A3)
みたいな値をB列にA列の終わりまで入れていくにはどうしたらいいですか?
For文で回すんでしょうか・・・?
データの最終位置を取得するのに、「End(xlDown).Row」と、「(Rows.Count, 1).End(xlUp).Row」
ってどう違うんでしょうか?
MsgBox "End(xlDown).Row : " & Cells(1, 1).End(xlDown).Row
MsgBox "(Rows.Count, 1).End(xlUp).Row :" & Cells(Rows.Count, 1).End(xlUp).Row
↑
を、マクロ開始前のセルの位置をズラして色々やってみても結果は同じでした・・・。
539:デフォルトの名無しさん
12/03/08 01:33:09.38
>>538
Cells(1, 1).End(xlDown).Row は上から順番に見ていく
途中に空白があると、それより下のデータは無視される
Cells(Rows.Count, 1).End(xlUp).Row は下から順番に見ていく
最終行までびっちりデータが入っている場合を除いて、本当の一番下がわかる
540:デフォルトの名無しさん
12/03/08 01:45:52.43
>>539
分かりやすい説明をありがとうございました。
で、
=LEN(A1)
=LEN(A2)
=LEN(A3)
みたいのを入れてくには、やはりFor文で回すのでしょうか?
541:デフォルトの名無しさん
12/03/08 02:04:48.60
>>540
数十行程度ならForでもいいと思う
もっと大量にある場合はオートフィルの方がプログラムがすっきりするし処理スピードも速いはず
542:540
12/03/08 02:21:23.52
>>541
ありがとうございます!
ググってみたところ、
Range("B1").AutoFill Destination:=Range("B1", Range("A65536").End(xlUp).Offset(, 1))
でいけるみたいです!この方が頭よさそうだし、スッキリ見やすいし、これでいきます!
おかげさまで安眠できます。
夜分遅くにお付き合いいただき、ありがとうございました!
543:デフォルトの名無しさん
12/03/08 21:37:27.17
P列に区分として1又は9を入れた時、Q列に当日の日付を入れたい
で、その行位置は範囲は
2行目からlastrow = Cells(Rows.Count, "A").End(xlUp).Row
までとしてこういう時
どういう風に Worksheet_Changeに書けばいいんでしょ?
544:デフォルトの名無しさん
12/03/08 22:20:58.13
>>543
何がわからないの?
545:デフォルトの名無しさん
12/03/08 22:24:19.73
>>543
何も考えずにやれば、こう
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 1 To lastrow
If Cells(i, "P").Value = 1 Or Cells(i, "P").Value = 9 Then
Cells(i, 17).Value = Now
End If
Next
ただし、Worksheet_Changeでこれやっちゃうとループするので
違う所でやるか、変更箇所のチェックしてQ列なら変更しないとかの工夫が必要
546:デフォルトの名無しさん
12/03/08 22:26:58.87
だからP列に1又は9を入れた時、その横に当日日付を入れたい
で、どう書けば良いのか?って聞いてんですけど
547:デフォルトの名無しさん
12/03/08 22:31:28.83
リロードしてなかった。。。
>>545
ありがとうございます。
それを元にまた勉強してみます
548:デフォルトの名無しさん
12/03/09 00:27:00.69
結構ggったのですが解決しないのでどなたかご教授ください!!
if
以下の3セルの内容が数字(全角・半角)でないとき
処理Aを行う
Sheet1.Cells(y, x)
Sheet1.Cells(y, x+1)
Sheet1.Cells(y, x+2)
else if
Sheet1.Cells(y, x)のみが数値(全角・半角)でないとき処理Bを行う
という処理を掛けたいです。
別の言い方をすると、セルが文字・全半角スペース・空の時に処理を掛けたいです。
If not と IsNumberで出来ると思いきや上手くいってません。
お願いいたします。
549:デフォルトの名無しさん
12/03/09 00:27:09.17
>>545
cells(i,16)で書くよりCells(i,"P")で書いたほう
列が非表示だったら時便利ね!とか、関係ないことをオモタ
550:デフォルトの名無しさん
12/03/09 01:08:49.15
With Sheet1
a = StrConv(.Cells(y, x), vbNarrow)
b = StrConv(.Cells(1, x + 1), vbNarrow)
c = StrConv(.Cells(1, x + 2), vbNarrow)
End With
If IsNumeric(a) = "False" And IsNumeric(b) = "False" And IsNumeric(c) = "False" Then
処理A
End If
If IsNumeric(a) = "False" And IsNumeric(b) = "true" And IsNumeric(c) = "true" Then
処理B
End If
ベッタベタでよければ どうぞ。
551:デフォルトの名無しさん
12/03/09 01:15:04.82
>>550
ありがとうございます試してみます!!
IsNumeric IsNumberの使い方もあまりわかっていなかったので助かりました。
552:デフォルトの名無しさん
12/03/09 02:42:06.08
>>550
IsNumericはBooleanなんだが、なぜ文字列で判定する?
ちなみにIsNumericは、全角の数字でもTrueの判定するから、StrConvする必要はなかったりする
指数表記も認めたりするから、数字の定義によっては注意が必要
553:デフォルトの名無しさん
12/03/09 03:03:03.65
>>552
””いらないね。あっても動くけど。
If not IsNumeric(a) And not IsNumeric(b) And not IsNumeric(c)
で書いてたんだけど、解りにくいかと思ってやった。
今は反省している。
全角の数字判定は知らんかったわ。便利ね。
ありがとう
554:デフォルトの名無しさん
12/03/09 23:40:36.42
VBAは、無くなるの?
555:デフォルトの名無しさん
12/03/09 23:51:09.95
それは目出度い
556:デフォルトの名無しさん
12/03/10 00:40:01.35
JSサポートするという噂話だけ
557:デフォルトの名無しさん
12/03/10 01:21:54.25
VBAにJavaScript???
558:デフォルトの名無しさん
12/03/10 16:17:05.72
1行につき2シートずつ追加するマクロ(簡単に言うと)があります。
これが、72行ぐらいになって、シート数が159を超えたあたりから、シート追加の
「Copyメソッドが失敗しました」とエラーになります。
実際、そのブックでそれ以上シートを追加しようとしてもできません。
ググってみたところ、シート数に上限などはないようですが、メモリに依存するようです。
1枚1枚のシートは、それほど情報量はないのですが、Vlookup関数を多用してますので、
それもメモリを食っているかもしれません。
シート名も、平均22文字ぐらいあって、とても長いです。
一連のマクロは、一度も保存せずに、メモリ内だけで行っています。
データは、60行~80行ぐらいまである時もあり、一括管理できるようにするため、
やはり1つのファイルに収めるのが理想的ではあります。。
どうすれば、このエラーを回避できるでしょうか?
559:デフォルトの名無しさん
12/03/10 17:53:10.37
それってあるデータを見栄えのいいように整形するためにシートを作ってるって解釈でいいの?
560:デフォルトの名無しさん
12/03/10 18:26:11.05
試したけど、空白シートをただ追加するだけなら5000シートでも問題なかった
Excel2007 on Win7
シート毎の有効行やvlookupなど、少しずつ条件を変えて状況が変わるか試してみたら?
原因が特定できれば対処も考えやすいと思う
561:デフォルトの名無しさん
12/03/10 19:17:20.06
まず数百もシート作るっていう設計を考え直した方がいいんじゃないかと
562:デフォルトの名無しさん
12/03/10 21:48:45.31
ここは64bit版の出番だな。
563:デフォルトの名無しさん
12/03/10 22:17:58.69
Range("A1").Characters(Start, Length).TextのLengthに256を超える数値は指定できないんでしょうか?
257以上を指定したらCharactersクラスのTextプロパティを取得できませんってエラーが出るんです…
564:デフォルトの名無しさん
12/03/10 22:42:09.93
>>563
うちの2007ではちゃんと動いてる
環境かけ
565:デフォルトの名無しさん
12/03/10 22:49:30.49
>>564
Windows7 64bit版、Excel2010 32bit版です。。
566:デフォルトの名無しさん
12/03/10 22:52:16.01
ntの頃は、鯖と普通のやつの違いがレジストリのどっかが違うだけだったネタがあったな
567:デフォルトの名無しさん
12/03/10 22:53:02.68
>>566 誤爆
568:デフォルトの名無しさん
12/03/10 22:54:11.13
今試したらRange("A1").Characters(Start, 257).Font.Bold = Trueとかは動くのに
Textプロパティだとエラーが出てしまいます。。
やりたいことはTextプロパティを使わなくてもできるので別の方法考えてみます。
569:デフォルトの名無しさん
12/03/10 23:03:29.53
>>568
Length=256なら本当にOKなの?
570:デフォルトの名無しさん
12/03/10 23:07:39.75
>>569
MsgBox Range("A1").Characters(1, 256).Text
MsgBox Range("A1").Characters(1, 257).Text
の両方を試して256はOKでした
571:デフォルトの名無しさん
12/03/10 23:11:18.10
>>570
うちは同じ環境だけど、エラーでない
572:デフォルトの名無しさん
12/03/10 23:15:31.25
>>571
ですよねぇ・・・
今までもRange("A1").Characters(Start, Length).Textという書き方は何度もしてきたと思うし
こんなエラーに出会ったことがないので、たぶん私が何か見落としてるんだと思います。
もうちょっと調べてみます。ありがとうございました。
573:デフォルトの名無しさん
12/03/10 23:22:58.34
質問です。
今、ウインドウ枠の固定を使って、上から3行だけを固定で表示させるようにしています。
この固定部分にボタンを配置して、マクロを登録しようと考えています。
それで、ホイールを回せば4行目から下が上下にスクロールするわけですが、ホイールを
回して下に適当にスクロールさせて、固定部分のボタンを押す。
そうすると「画面に表示されている」上から4行目のセル番地を取得する。
そういうマクロを作成したいんですが、これは可能でしょうか?
すみませんがよろしくお願いします。
574:デフォルトの名無しさん
12/03/10 23:33:19.28
>>573
MsgBox ActiveWindow.ScrollRow + 3
575:デフォルトの名無しさん
12/03/10 23:42:17.38
>>574
おお!できた!
多分できないかなーと思ってたんで嬉しいです。
ありがとうございました。
576:デフォルトの名無しさん
12/03/11 00:33:01.82
>>572
うちの2007でも、TextやCaptionを取得しようとするとエラーになるな
でも設定してもエラーにならずに正常に動く
Dim c As Characters
Set c = Range("A1").Characters(0, 260)
MsgBox c.Text 'ここでエラー
おかしいのはRange.Charactersメソッドじゃなくて
CharactersクラスのTextメソッドだな
エラーのMsgBoxの行を変えてテストした
c.Text = String(25, "W") 'これは正常に動作
c.Text = String(250, "W") 'これはエラーは出ないが動作してない
c.Text = String(256, "W") 'これはエラー
どうも怪しげな動作してるな
577:デフォルトの名無しさん
12/03/11 02:56:35.77
Excelってなんでもできるんだなー
Excelで
578:デフォルトの名無しさん
12/03/11 04:55:25.47
それは無理
579:510
12/03/11 09:10:27.01
誰か>>510 知ってる人いませんかね。
OSはXPでエクセル2002です。
580:デフォルトの名無しさん
12/03/11 09:39:05.54
フォームの場合、エクスポートしたファイルには
フォームやそこに配置したコントロールのプロパティと
プログラムコードが1つのファイルに書かれているわけだが
インポートしたときにプロパティ領域とコード領域を分ける空行部分が
コードエディタ側に読み込まれるってだけの話だろ
581:デフォルトの名無しさん
12/03/11 09:45:34.73
>>580
分かりやすい回答ありがとうございました。
582:デフォルトの名無しさん
12/03/11 10:09:37.71
え、formってimportできるんすか?!!
この前 outportしてそのままimportしたら、class moduleになったので、もうてっきり無理なんだと。。。
583:558
12/03/11 14:30:33.27
>>559
ええと、業務用です。
取引先ごとに、表紙と帳票をセットにして、FAXするのですが、今までは帳票だけを
ガーッと保存もせずに、シート追加して作成するマクロがあって、別にFAXの表紙だけを
まとめたExcelファイル(取引先300件分のシートがあって、3,3Mくらいのファイル)
の中から、該当の取引先宛の表紙を探して、総FAX枚数や、帳票内の集計数なんかをちょちょっと
直して、印刷して、帳票とマッチングしてFAXしてたんですが、データ(取引先)が
72件もあると、結構2時間ぐらいかかる作業なんです。
この仕事を引き継いだ、元ヘタレPGの私としましては、なんとしてもマクロ化
しちゃいたい衝動にかられまして、FAX表紙は、ざっと3パターンしかなかったので、
取引先を一覧にして、表紙のテンプレに、Vlookup()で引っ張ってきて、
表紙と帳票とセットでシート追加するようにマクロを組んだんです。
そうしたらこのエラーです。
まあ、限界に挑戦するマクロだとは思うんですが、、元々の量の倍になってる
訳だし、、やっぱりファイルを分けるしかないのかな・・。
メモリを食ってる部分が、VlookUPなのか、シート名なのか、それともファイルを
保存してないせいなのか、ある程度でも分かれば、そこを対処してから、ファイルを
分ける方向で行こうかと思って質問させて頂いた次第です。
ひょっとしたらスレチかもしれませんが・・・。
584:558続き
12/03/11 14:31:55.26
計算式より、値が入ってた方がExcelのメモリは食わないんでしょうか・・・?
ちなみにファイルサイズは、2.3Mくらいです。
ここ↓
URLリンク(oshiete.goo.ne.jp)
で、詳しく説明して下さってる方がいるんですが、ここでいう、「配列数式」や
「揮発性(volatile)関数」ってのが何のことなのか、いまいち分かりません。。
VlookUPのことなのか?だとしたら、VlookUPをマクロでやってしまった方がいいんだろうか・・・
長々とすみません。お知恵をお貸しくださいますと幸いですm(_ _)m
585:デフォルトの名無しさん
12/03/11 14:38:02.97
vlookupでもシートでも話聞く限り、そこまでメモリ食う感じがしない
顧客名全部仮の名前にして、FAX表紙も適当なものに差し替えてファイルアップすれば
もっと具体的なアドバイスもらえるんじゃないかな
586:558
12/03/11 14:51:48.85
>>585
ありがとうございます。
ファイルは会社にあるので、アップするとしたら明日以降になりますが・・・。
最初のシートに、全ファイルの目次を作って、目次から、各シートに飛べるように
ハイパーリンクを組んだんですが、ひょっとしたらそれがいけなかった・・・?
VBA初めてなので、ソース見ていただいた方がいいかもしれませんね。。
587:デフォルトの名無しさん
12/03/11 15:01:52.27
あと、エラーがでた環境も詳しく
OS、Excel、メモリ
588:558
12/03/11 15:16:02.07
>>587
了解しました!(OSはXP、Excelは多分2003・・・)
589:デフォルトの名無しさん
12/03/11 15:56:09.31
Vista.sp2,Excel2000
新しいExcelで,Excel2000のソートコードが動くでしょうか
使っているコードです
sh2.Range("e9").Select
Rows("11:45").Select
Selection.Sort Key1:=Range("A11"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin
sh2.Range("e9").Select
590:デフォルトの名無しさん
12/03/11 16:18:23.96
>>589
動くよ
591:デフォルトの名無しさん
12/03/11 16:38:44.83
>>590
ほんとにありがと
592:デフォルトの名無しさん
12/03/11 16:45:48.72
VISTA Excel2007
微妙にスレチっぽくて恐縮なのですが…
ExcelからADOでAccess2010ファイルに接続したいのですが
udlファイルを作成して、ダイアログでProviderとData Sourceを指定、接続テストも通るのに、
いざ次のコードでそのudlファイルを指定するとエラーになります
([ODBC Driver Manager]データソース名および指定された既定のドライバが見つかりません)
原因分かる方いますでしょうか
ADODBCon.Open UDL01_fPath
またExcelVBAでudlファイルのProviderの値の取得方法ってあるのでしょうか?
Data Sourceの値は以下のコードで取得できたのですが、Provider値の取得方法が分かりません
以下のコードでData Sourceの部分をProviderに置き換えてもエラーに
With CreateObject("ADODB.Connection")
.ConnectionString = "FILE NAME=" & UDL01_fPath
DB_FPath = .Properties.Item("Data Source").Value
End With
以下、udlファイルの中身です
[oledb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\test\DB\Database1.accdb;Persist Security Info=False
593:デフォルトの名無しさん
12/03/11 16:57:24.25
補足
UDL01_fPath ’udlファイルのフルパス
udlファイルにアクセスする前に、udlのData Sourceに格納されたDBファイルの
存在チェックを入れており、その部分ではエラーがないので、
Providerの指定でエラーが起きてると思うんですが分かりません
最初はudlファイルのProviderとData Sourceの値をコード内で指定していたのですが、
その時はエラーはありませんでした
その時の値とをテキスト上にコピーして文字列を比較しても差異はありませんでした
594:デフォルトの名無しさん
12/03/11 19:42:42.20
>>592
なんか良くわからんが、たぶん
ADODBCon.Open "FILE NAME=" & UDL01_fPath
MsgBox ADODBCon.Provider
595:デフォルトの名無しさん
12/03/11 19:59:57.96
>>594
ありがとうございます!!
うまくいきました
こんな見落としで何時間も浪費していたなんて自分が情けない
596:デフォルトの名無しさん
12/03/12 16:09:38.74
以前、>>447でカラーパレットについて質問したものです。
ユーザーフォームにボタン表面の色を変えたものを複数並べる
ことによって色を選ぶようにしました。
ボタン一つ一つのクリックイベントにコードを書いたのですが、
イベントの共有やどのボタンが押されたかを識別することによって
コードを簡素化したいのですが、VBAでそういったことは可能でしょうか?
ググったのですが、ブックの共有などの情報ばかりで検索しきれなかったので、
どなたか教えてください。
よろしくお願いします。
597:デフォルトの名無しさん
12/03/12 18:41:11.31
application.caller で出来たっけ?
598:デフォルトの名無しさん
12/03/12 19:51:06.54
オートフィルタをかけた抽出結果のタイトル行を除いた最初の行の、二番目の列から、
データの入っている有効セル全てをコピーするにはどうすればいいでしょうか?
599:デフォルトの名無しさん
12/03/12 20:13:22.36
こんばんあ!しつもんだお!
for nextの後にcallでquerytable.addすると処理固まってしまうのですが、どうすれば良いですか?メモリとかバッファとかよくわかりません
600:デフォルトの名無しさん
12/03/12 20:17:12.27
すいません。
VBAで32bit符号無し演算をしたいんですが、型がlongじゃダメです。(当然)
どんな技を使えば良いですか?
601:デフォルトの名無しさん
12/03/12 21:01:49.30
>>596
Part17で似た質問をして、カラーパレットをクラスモジュールを使って作成したことがあります。
できてはみたものの、クラスモジュールはよく分かりませんでした。
VBやC#なら、どのイベントにどのプロシージャを結びつけるかをプロパティウィンドウで
簡単に設定できるようになっています。
VBAではそういう使い方は向いていないのではないか、と思います。
602:596
12/03/12 21:49:46.96
>>597,601
ありがとう。
Application.Callerをググったら、どの例もシート上のボタン等を調べるみたいで、
ユーザーフォーム上のボタンのクリックイベントでは使えないみたいです。
URLリンク(detail.chiebukuro.yahoo.co.jp)
ここを見ても、601さんが書かれているように気軽にできる感じではなかったので、
ボタンのtagプロパティにカラーコードを書いておいて、activecontrolで識別するようにしました。
603:デフォルトの名無しさん
12/03/12 23:05:54.84
>599
Long型でユーザー定義変数を作成し、
LSetステートメントで強制的に2つのLong型に分割。
2つのLong型を下位32bitと上位32bitで別々に計算し、
計算後に改めてCurrent型にLsetステートメントで合体。
という方法がある。
「VBA currency型のビット演算」でググるとよろし。
604:デフォルトの名無しさん
12/03/13 12:18:48.28
>>603
ちょーthx.
605:デフォルトの名無しさん
12/03/13 19:30:37.29
Excel2010
bookname = "D:\data\backup\data_xxxxxxxx.xlsx"
xxxxxxxxxx は作業日付
Worksheets("data").Copy
With ActiveWorkbook
.SaveAs Filename:=bookname
.Close
End With
としてdataシートを別ブックに保存しようとすると、このシートには
Activateになった時に作業をするモジュールがついていて xlsxでは
保存出来ないとExcelに言われてしまうんですが。。。
保存する際にモジュールは要らなくデータだけで良いんですけど
どうすればモジュールを切り離して保存出来るんでしょうか?
606:デフォルトの名無しさん
12/03/13 19:41:52.71
>>605
今、手元にExcel2010が無いんで自信ないけど、
.SaveAs Filename:=bookname, FileFormat:=xlOpenXMLWorkbook
とかでどうだろ?
明日会社行けば試せるんだけど・・・
607:605
12/03/13 19:59:10.22
すごい!
出来ました。
そのFileFormat指定は初めてです。
ありがとうございます。m(__)m
608:デフォルトの名無しさん
12/03/13 20:32:15.03
はろー。ループするとき処理待ちするにはどうすればいいですか?
609:デフォルトの名無しさん
12/03/13 20:36:33.61
「こんばんわ、処理町隆史です」という。
610:デフォルトの名無しさん
12/03/13 20:43:21.74
おれがずっと探し求めていたのはジャーマンスープレックスもといドゥーイベントカンスーだったようだ…
611:デフォルトの名無しさん
12/03/13 21:55:34.65
>>608
DeEvents
612:デフォルトの名無しさん
12/03/13 22:05:09.05
OS:XP Home 32bit
Excel:2003
条件を満たした場合、ソースコード自体を書き換える事は可能でしょうか?
613:デフォルトの名無しさん
12/03/13 22:24:36.95
>>605-607
Application.DisplayAlerts = False
でいいんじゃないのか
614:デフォルトの名無しさん
12/03/13 22:29:45.74
>612
できるけど、OSやExcelのバージョン違いに対する対応なら
#If~#Then~#EndIfや#Constの条件付きコンパイルを使うほうがよい。
どうしても書き換えしたいなら、参照設定で
「Visual Basic for Applications」に参照設定をすれば
VBEのコードそのものを直接VBAで動かせるようになる。
615:デフォルトの名無しさん
12/03/13 22:35:10.19
>>613
Application.DisplayAlerts = False
↑
これは単にメッセージ出すのを抑制するだけですよ?
616:デフォルトの名無しさん
12/03/13 23:37:57.80
>>615
xlsxで保存したらマクロは保存されない
警告なしで保存できるんだからそれでいいだろ
617:デフォルトの名無しさん
12/03/13 23:53:25.53
>>613,616
なるほど。そういう手もあったんですね
618:デフォルトの名無しさん
12/03/13 23:55:37.82
>>615
↑
お前がずれてますよ
605もアホだがエスパーすると…
…
…
…
警告なしに保存したいということだろ
だからDisplayAlerts=Falseが合っている
FileFormat指定が的外れ
警告はxlsxで保存するとマクロは保存されませんよ
ってことだからな
619:586
12/03/14 01:29:08.85
とりあえず、「Copyメソッドが失敗しました」のエラーが起こる簡易版のファイルを
作成しました。
URLリンク(www.vivi-loda.mydns.jp)
DLkey:asd
test1の方で実行しても、test2で実行しても、
こちらの環境(Win7 HomePreminum SP1(32ビット版)、Excel2003 SP3、メモリ3G)
だと、44シート追加したあたりで、当該エラーが出ます。
このファイルだと、マクロではエラーが出るものの、手作業でシート
追加はできますが、とりあえずこのエラーを回避したいです。(できるものなら)
ちなみにこのマクロを実行すると、一時的にPCが重くなったりするので、お気をつけください。
よろしくお願いいたします。
620:デフォルトの名無しさん
12/03/14 02:19:08.42
>>619
自分の環境ではエラーにならない
Win7 Ultimate SP1 (64bit) メモリ8GB、Excel 2007 SP2
621:デフォルトの名無しさん
12/03/14 03:45:17.31
>>619
Vista Ultimate SP2 32bit Excel2007 SP3もエラーなし
ちなみにシート500まで追加させても問題なし
2003の問題か、PCの問題だな
昔ディスプレイドライバー辺りのバグでExcelでメモリ不足出たことあったが
つかWin7でExcel2003とか動作保障あるのか
622:デフォルトの名無しさん
12/03/14 04:00:24.00
>>619
流れ読んでないけど、ワークシートのコピーは複数回実行するとマクロでなぜかエラーになる現象がある。
標準のワークシートをコピーする関数を使うのはやめて、「ワークシートを追加→セル全体をコピー→ペースト」
という関数を作っておくと楽。
623:622
12/03/14 04:19:36.65
ちなみに >>619 のファイルを実行したらうちの環境
・Win7 Ultimate XP SP3 / Excel 2003 SP3 / メモリ3G
・Win7 Ultimate SP1 x86 / Excel 2003 SP3 / メモリ3G
・Win7 Ultimate SP1 x64 / Excel 2003 SP3 / メモリ8G
でも「実行時エラー '1004':
Worksheet クラスの Copy メソッドが失敗しました。」は出ます。
(エラーが発生する回数はランダム)
念のため確認ですが、手作業で「シートの追加」はできても「シートのコピー」はできないですよね?
で、ファイルを開き直すといったん復活して、再度実行すると同じ感じでエラーになる(毎回エラーに
なる回数は違う)ってやつですよね?
というよりか、マクロを使わないでも手動で何十回もシートをコピーすると、シートがコピーできないが
シートの追加はできるという現象は発生します。標準のシートコピーは使わないのがよいと思われます。
でも、この現象ってExcel 2007だと発生しないのか。知らなかった。
624:622
12/03/14 04:22:25.46
Win7 Ultimate XP SP3ってなんだ?そんなOSネーヨ(^_^;)
Win XP SP3の間違いです・・・。
625:デフォルトの名無しさん
12/03/14 06:50:26.27
外部音源やMIDIデバイスを使わずにbeep音をディストーションギターの16和音にするにはどうすればいいでしょうか
626:デフォルトの名無しさん
12/03/14 06:59:09.15
URLリンク(oshiete.goo.ne.jp)
No1参照
627:デフォルトの名無しさん
12/03/14 12:09:50.35
縦のrangeを横のrangeにコピーするにはどうすれば良いですか
628:デフォルトの名無しさん
12/03/14 12:30:24.18
>>627
マクロを記録してみろ
629:デフォルトの名無しさん
12/03/14 17:08:15.94
範囲指定して数値のセルのみ抽出するにはどうすれば良いですか
630:デフォルトの名無しさん
12/03/14 17:24:44.23
>>629
URLリンク(www.google.co.jp)
631:デフォルトの名無しさん
12/03/14 17:32:20.94
>>629
IsNumeric
632:デフォルトの名無しさん
12/03/14 17:42:11.29
do loop 内の処理で繰り返した回数を得るにはどうすれば良いですか
633:デフォルトの名無しさん
12/03/14 17:43:03.45
googleでdo loopって打ち込んだら画面が回ったwww
634:デフォルトの名無しさん
12/03/14 17:49:15.82
>>632
変数作って数えさせろよ
635:デフォルトの名無しさん
12/03/14 17:54:30.78
どう書けばよいでしょかお?
636:デフォルトの名無しさん
12/03/14 18:05:08.53
Dim count as Integer
Do While true
count++
Loop
637:デフォルトの名無しさん
12/03/14 18:07:40.23
++は使えなかったかも
Dim count As Integer: count = 0
Do While True
count = count + 1
Loop
638:デフォルトの名無しさん
12/03/14 18:14:02.46
あ、成る程ですthx
639:612
12/03/14 22:30:17.63
>>614
ありがとうございます
レスを参考に調べてみます
640:デフォルトの名無しさん
12/03/14 22:55:04.43
VBAだけで就職先はあるのでしょうか?
Javaなどは募集をよく見ますが…
あとVBAとJavaは皆さんどのくらいでできるようになりましたか?
専門学校で学んだのですか?
641:デフォルトの名無しさん
12/03/14 22:59:58.12
>>640
すれ違いなような
642:デフォルトの名無しさん
12/03/14 23:45:13.32
>>640
VBAだけで就職は無理
Excelが使えるって条件の事務職員の募集なら見たことあるけど
643:デフォルトの名無しさん
12/03/15 00:14:07.98
グラフの縦軸の値の最大、最小、目盛の間隔は自由に決めることはできますが、横軸もできますか?
Excel2003、2010どちらでもいいので、できるならばやり方を教えてください。
よろしくお願いします。
644:デフォルトの名無しさん
12/03/15 00:48:20.37
>>643
縦でも横でもやり方は同じ
軸を右クリックすれば設定画面が出る
645:デフォルトの名無しさん
12/03/15 00:51:34.04
__
, ‐' ´ ``‐、 / ̄:三}
. /,. -─‐- 、. ヽ / ,.=j
_,.:_'______ヽ、 .! ./ _,ノ
`‐、{ へ '゙⌒ `!~ヽ. ! /{. /
`! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ そんなことよりネコ投げようぜ!
. {.l '⌒ ゙ 6',! / :::::::::::::::/ __
. 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、
. ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ
,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 /
/ / :::::::::::::::: ;な /´\ / r'\
. i ! ::::::::::::::/ る | .!::::::::/ヽ、.._!ヽ. ヽ、
{ {:::::::::::;:イ / し ∥i:::::::/:::::::::::::/ \
. ヽ ヽ,.ァ‐'´ /ヽ ま ,/`ヽ、::::::::: /
URLリンク(i.imgur.com)
646:デフォルトの名無しさん
12/03/15 01:14:33.54
>>644
こんな時間にレスありがとうございます。
今2010でやってるのですが、右クリックすると軸の書式設定というメニューが
出るのですが、縦軸と横軸では項目内容が違っています。
横軸では、最大、最小、値の間隔はないです。
見てるところが違うのでしょうか?
647:デフォルトの名無しさん
12/03/15 01:50:23.30
>>646
グラフの種類によっては変更できない
たとえば散布図だとどっちの軸も同じように設定が変えられる
648:デフォルトの名無しさん
12/03/15 01:51:43.73
>>642
そのExcelが使えるってどの程度のレベルの使えるなの?
男でもある?
649:デフォルトの名無しさん
12/03/15 02:01:33.59
>>647
ありがとうございます。
散布図で何とかできました。
650:デフォルトの名無しさん
12/03/15 02:05:46.33
>>648
バイト価格だね
651:デフォルトの名無しさん
12/03/15 02:17:39.55
VBAが使えるといえば普通は
Oracle SQLが使えるというのも含む
652:デフォルトの名無しさん
12/03/15 05:00:10.04
VBAが正しく使えれば
DelphiだろうがJavaScriptだろうがJavaだろうがCだろうが
そんなに難しくない筈
むしろVBAのほうが難しいくらいかも
ただSQLはちょっと毛色が違うからVBAが使えることとSQL
が使えるということは同じだとは思わないほうがいいかも
653:デフォルトの名無しさん
12/03/15 06:51:56.55
vbaで使うデータベースはなにが良いのですか?いまはシートにデータ並べてますけれど
654:デフォルトの名無しさん
12/03/15 07:03:43.75
ググってきたら
655:デフォルトの名無しさん
12/03/15 08:17:32.38
>>625
波形を気合いで計算してWAVの頭の構造体を気合いでくっつけてdirectsound8
656:デフォルトの名無しさん
12/03/15 08:22:26.53
>>653
一番相性がいいのはもちろんAccess
657:デフォルトの名無しさん
12/03/15 16:53:47.11
こんにちあ!
コード書き終えたの
ですけど12時間以上処理してるの
でアドバイスくれし
658:デフォルトの名無しさん
12/03/15 18:07:40.25
コードを載せろよ
659:デフォルトの名無しさん
12/03/15 18:30:36.11
>>657
ScreenUpdatingとか、よくある高速化テクニックは使ってる?
660:デフォルトの名無しさん
12/03/15 18:33:58.45
XP/Excel2000
csvファイルを出力させたいのですが、見よう見まねで固定のファイル名が出せるところまでは辿り着きました。
次にファイル名をセル参照なり変数でつけたいのですが、どうしたらいいでしょうか?
Private Sub CommandButton1_Click()
Const cnsFILENAME = "\test.CSV"
Dim FSO As New FileSystemObject
Dim TS As TextStream
Dim GYO As Long
Dim GYOMAX As Long
GYOMAX = Range("C65536").End(xlUp).Row
Set TS = FSO.CreateTextFile( _
Filename:=ThisWorkbook.Path & cnsFILENAME, _
Overwrite:=False)
GYO = 3
Do Until GYO > GYOMAX
TS.WriteLine FP_EDIT_CSVREC(GYO, 2, 3)
GYO = GYO + 1
Loop
TS.Close
MsgBox "OK"
Set TS = Nothing
Set FSO = Nothing
End Sub
661:デフォルトの名無しさん
12/03/15 19:32:54.15
>>660
Dim cnsFILENAME As String
cnsFILENAME = "\test.CSV"
とか
cnsFILENAME = Range("C5").Text
とか
662:デフォルトの名無しさん
12/03/15 20:05:05.30
とりあえずscreenupdating使って見たんだけど、最小化してまた大きくしたら画面真っ黒になっちゃったよ
進行状況だけ表示しとけばよかったかなあ
663:デフォルトの名無しさん
12/03/15 20:13:18.21
関数をワークシートにたくさん埋め込んでいるんだったら、作業中はOffにして作業後にOnに戻す
これはかなり効く(たくさん埋め込んでいたらの話だけど)
664:デフォルトの名無しさん
12/03/15 21:12:15.18
どうやってoffにするのですかお
665:デフォルトの名無しさん
12/03/15 21:15:09.26
もしかしてワークシート最小化にしてたらマクロ処理しないのですかお
666:デフォルトの名無しさん
12/03/15 21:19:50.44
まずモニターのスイッチを切れ
667:デフォルトの名無しさん
12/03/15 21:22:44.25
>>665
マクロの記録やってみれ
Excel2010では↓のようになった
Application.Calculation = xlManual
↓もとに戻す
Application.Calculation = xlAutomatic
668:デフォルトの名無しさん
12/03/15 21:23:06.41
画面更新ができないような処理してるからだと
669:デフォルトの名無しさん
12/03/15 21:30:59.55
>>640
VBA初心者レベル、Excelは基本操作もおぼつかない
当然ながらブラインドタイプとかはできないし、
ほかの言語などもまったく分からない。
というレベルで
週5日*1日8時間*時給1800円の仕事してます。
作業内容は一日分ずつのCSVファイルを一か月分にまとめたり
それをグラフにしたりするだけです。
チョー楽だけど退屈です。
670:デフォルトの名無しさん
12/03/15 21:42:43.01
そういうことを出来るようにしてくれた人がいたってだけでしょ
671:デフォルトの名無しさん
12/03/15 21:44:29.82
どういうこと?
672:デフォルトの名無しさん
12/03/15 21:45:11.50
金で時間を買われてるな
673:デフォルトの名無しさん
12/03/15 21:48:16.20
初心者っていう人がVBAでそういうことを出来るようにすることが出来るのかなって感じなんだけど
674:デフォルトの名無しさん
12/03/15 21:48:39.69
>>672
時間を売って金を得て
金を使って時間を買うということ?
675:デフォルトの名無しさん
12/03/15 21:50:45.28
ノルマこなして、お金もらってるだけでしょ
676:669
12/03/15 21:56:00.37
>>673
会ったこともない誰かが作ったマクロを使ってます。
ところどころパラメータ(セルの行とか列とかの指定)を書き換えて実行するだけです。
>>675
ノルマは特に無いです
というかむしろ早く終わりすぎたらマズイらしくて
一年かけてダラダラやってます。
677:デフォルトの名無しさん
12/03/15 21:59:39.96
VBA使って効率化出来るのを目の当たりに見ると怒る人がいる、世の中だからね
コンピュータで処理できるようにしたのに、
コンピュータが勝手に作ってる
とか、言われたときは...
678:デフォルトの名無しさん
12/03/15 21:59:45.52
結局669はVBAを使ってはいるけれど
プログラミングの仕事ではないってこと?
679:デフォルトの名無しさん
12/03/15 22:01:22.71
>>676
お役所?
680:デフォルトの名無しさん
12/03/15 22:04:50.80
>>676
大阪市?
ここだけの話で
681:676
12/03/15 22:09:47.46
>>678
一応、仕事の名目は
エクセルでのデータ整理です
>>679
公務員じゃないけど似たようなもんです。
業務の成果は求められてなくて、
ただ単に労働時間分の拘束をされてるだけって感じです。
>>680
ちゃいまっせ、ホンマにちゃいまっせw
682:デフォルトの名無しさん
12/03/15 23:12:01.77
マクロの記録てこういうときにつかえるんだなあみつを
683:デフォルトの名無しさん
12/03/16 00:43:25.24
ちょこっとわからない程度なら、部分的にマクロ記録のコードコピペしてます。
スピードも全く問題ないことがほとんど、使えなかった頃より実質こなせる業務がかなり増えた。
684:586
12/03/16 05:51:54.44
忙殺されて、、、レス遅くなってすみません。
>>620->>624
皆さん、ありがとうございます。
会社のPC(WinXP Pro SP3/Excel 2003 SP3/メモリ2G)
でもやはり44シート目で実行時エラーでした。
手持ちのもう一つのネットブック(Win7 32bit版/Excel2010/メモリ1G)
で試したら、エラーは出ず、なんと、500シートでも動きました。
2003のバグですかね。。
ありました・・・これですね。
URLリンク(support.microsoft.com)
-------
ブックに定義済みの名前を付けて保存したり、次のサンプル コードのように、ブックを閉じることがなく複数回ワークシートをコピーするとこの問題が発生することができます。
-------
発生することができます・・って・・・・
685:586
12/03/16 05:52:55.59
>>623
ええと、マクロ実行して、1004が出たての未保存のブックは、シートの追加はできても、シートのコピーはできません。
(エラーも出ず、一瞬画面がブレたようになって無反応)
いったん、保存して開きなおしたファイルだと、シートのコピーはできますが、再び、マクロを実行すると、
実行時エラー'1004':
シートの名前をほかのシート、Visual Basic で参照されるオブジェクト ライブラリまたはワークシートと同じ名前に変更することはできません。
となって止まり、
ブックをみると、test1を押した場合は、「テンプレ(2)」を、test2を押した場合は、「テンプレ2 (2)」のシートを追加しようとしてるところで、また同じ名前で追加しようとして、止まってる感じ・・・
ActiveSheet.Name =
がうまくいってないような感じです。
しかもエラーの回数はなんか毎回、44です。。PCに他にどんな重い処理をさせていても44。。会社のPCもそうでした・・。
なんだコレ・・私のやり方が何かおかしいのか・・・
686:586
12/03/16 05:55:19.72
このKBを見る限り、2007でも、2010でも発生するみたいですね。。
URLリンク(www.microsofttranslator.com)
テンプレートで保存して呼び出して使えって・・・。Vlookupで引っ張ってて、複数のシートがあっても大丈夫なんかな・・・
それとも100シートごとに保存するか・・・
それともシート挿入→末尾に移動→値の貼り付け→書式の貼り付け→印刷設定の貼り付け
という関数を作っておくか・・・
印刷設定がちゃんとなってるシートの印刷を手前において、反映したいシートを複数選択し、
印刷設定を開いてそのままOKボタンを押すと、複数のファイルに印刷設定が反映されるって
書いてあって、実際その通りだったけど、ウィンドウ枠の固定と、印刷タイトルの設定が反映されてなかった・・・
これだけ一個一個やるように関数に組み込むしかないのか・・・
687:586
12/03/16 05:56:10.36
そろそろ眠い・・・
しかもこの仕事を引き継ぐ人がマクロとか難しくて嫌だから、手作業でやりたいと言い出して、
このマクロは使われない可能性が高くなってきた・・・
中身なんて知らなくていいから、黙ってボタン押せっつーの!くそ・・・!
でも自己満で作るけどさ。
事務の世界っていつもこうなる・・・やっぱり私に事務は向かないのか・・かと言って、バケモンだらけのPGの世界ではこれ以上やってく自信がない・・・
>>677
あるあるあるあるあるある
=Exact() で簡単に同じかどうかのチェックなんて出来るのに、「目視確認でやった方が確実だから、目視でやって」、とか ┐(´д`)┌
チラ裏すみません。眠いです・・・
688:デフォルトの名無しさん
12/03/16 08:09:03.03
>>661
サンクス
689:デフォルトの名無しさん
12/03/16 09:49:02.14
Valueエラーが出るけどどこが悪いか分かる方いますか?
Function sealtime(A As Range, B As Range)
'Application.Volatile '自作関数を自動再計算させます。
Dim time As Double
time = Application.WorksheetFunction.ATAN((B - A) / 1)
If time < 0.005 Then
sealtime = "OK"
Else
sealtime = ""
End If
End Function
690:デフォルトの名無しさん
12/03/16 09:55:24.55
とりあえず
Application.WorksheetFunction.ATAN
より
Atn
のほうがいんじゃね
691:デフォルトの名無しさん
12/03/16 10:30:21.14
>>689
ワークシート関数が全部VBAで使えるわけじゃない
692:デフォルトの名無しさん
12/03/16 11:13:02.48
ダブルクリックで画像を挿入したくてネットで調べて色々コピペして作ったんですけどたまにエラーが出ます
あと画像を開こうとしてキャンセルすると『1004 指定したファイルが見つかりませんでした』って出ます
どこを直せばいいでしょうか お願いします
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myRange As Range
Set myRange = Range("C2:G10,C312:G21,C24:G32")
If Application.Intersect(Target, myRange) Is Nothing Then
Exit Sub
End If
Dim objFileName As String
Dim objShape As Shape
objFileName = Application.GetOpenFilename _
Set objShape = ActiveSheet.Shapes.AddPicture( _
Filename:=objFileName, _
LinkToFile:=False, _
SaveWithDocument:=True, _
Left:=Selection.Left, _
Top:=Selection.Top, _
Width:=242#, _
Height:=120#)
Cancel = True
End Sub
693:デフォルトの名無しさん
12/03/16 11:32:07.34
あ なんかいけたっぽい こうしたらスムーズになった
sFile = Application.GetOpenFilename(FileFilter:="gif,.gif")
If sFile = "False" Then Exit Sub
694:デフォルトの名無しさん
12/03/16 12:12:14.79
エクセル2003のグラフのことで教えてください。
グラフ上のマーカーの上にマウスカーソルを乗せるとデータが表示できますが、
その表示されたデータを取得することはできないでしょうか?
もしくは、そのマーカーに対応するセルをアクティブにする方法でもいいです。
どなたか、よろしくお願いします。
695:デフォルトの名無しさん
12/03/16 12:32:19.74
>>694
できません
696:デフォルトの名無しさん
12/03/16 12:50:50.80
>>694
マーカーに透明なラベルを被せたら余裕で何でもできる
697:デフォルトの名無しさん
12/03/16 15:24:36.03
for each でレンジ範囲の文字列数え上げるとき、数え残すことある?
698:デフォルトの名無しさん
12/03/16 15:27:49.62
>>697
例えば?
699:デフォルトの名無しさん
12/03/16 15:35:26.75
count = 0
for each a in range("a1:e5)
if("あほ"=a.value) then
count =count +1
end if
next a
で、
for b =1 to a
にしてるんだけど、bがバグる
700:デフォルトの名無しさん
12/03/16 15:35:57.24
さいごにnext bは入れてる
701:デフォルトの名無しさん
12/03/16 15:41:28.29
>>699
aって何?
702:デフォルトの名無しさん
12/03/16 15:41:47.29
>>699
○ For b = 1 To count
× For b = 1 To a
703:デフォルトの名無しさん
12/03/16 15:45:00.17
ああcountにしてるけどバグる
704:デフォルトの名無しさん
12/03/16 15:45:45.84
>>703
バグる?
705:デフォルトの名無しさん
12/03/16 15:52:53.95
>>699
699がかなりあほってことでよろしいか?
706:デフォルトの名無しさん
12/03/16 15:54:53.70
bに同じ数続くことがあるのでする
707:デフォルトの名無しさん
12/03/16 15:57:41.20
マクロ記録をそのまま使ってる人いますか?
やはり自分で全部書くのが普通でしょうか。
708:デフォルトの名無しさん
12/03/16 16:22:56.46
>>707
状況によるけど
そのままでは使い物にならないことが多い
ていうか、記録した方が早い部分と、自分で書いた方が早い部分とがあるので
うまく組み合わせた方が結果的に早くプログラムが完成する
709:デフォルトの名無しさん
12/03/16 23:26:58.50
>>696
> >>694
> マーカーに透明なラベルを被せたら余裕で何でもできる
やり方教えてクレクレ
710:デフォルトの名無しさん
12/03/16 23:51:19.86
DOSのコマンドライン引数を取得できないの?
Sub Workbook_Open
For I = 0 To ARGC -1
Debug.Print ARGV(I)
とか。
711:デフォルトの名無しさん
12/03/17 00:08:29.34
>>709
そんな態度で教える馬鹿がいるか
712:デフォルトの名無しさん
12/03/17 00:09:20.05
うっはwwwwwwいま気づいたんだけどもしかして時間かかる作業させるときってさいごにシート保存するコードとか入れたりするの当たり前だったりするわけですよねですよねえええ
713:デフォルトの名無しさん
12/03/17 00:11:35.15
あたりまえだ
714:デフォルトの名無しさん
12/03/17 00:14:16.48
ああもしかして指定時刻にセーブする処理とか入れてリスク管理してみたりするのかあああ
715:デフォルトの名無しさん
12/03/17 00:34:43.42
>>711
おしえれ
716:デフォルトの名無しさん
12/03/17 10:26:53.14
>>710
> DOSのコマンドライン引数を取得できないの?
>
GetCommandLine関数
717:デフォルトの名無しさん
12/03/17 10:58:03.30
>>711
おしえれ ksg
718:デフォルトの名無しさん
12/03/17 11:47:45.96
>>716
ありがとうございます。
URLリンク(msdn.microsoft.com)
ってこれ外部ライブラリ・コールか何かせんとあかんのやね、きっと。
719:デフォルトの名無しさん
12/03/17 14:02:53.16
Private Declare Function GetCommandLine Lib \\\"kernel32\\\" Alias \\\"GetCommandLineA\\\" () As Long
Private Declare Function lstrcpy Lib \\\"kernel32\\\" Alias \\\"lstrcpyA\\\" (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
Sub Workbook_Open
Dim sBuf As String
strBuf = Space$(255)
Call lstrcpy(strBuf, GetCommandLine())
Debug.Print strBuf
end Sub
720:デフォルトの名無しさん
12/03/17 14:05:29.66
ごめん、p2で書いたら変な「\」がついちゃった
Private Declare Function GetCommandLine Lib "kernel32 " Alias "GetCommandLineA" () As Long
Private Declare Function lstrcpy Lib "kernel32 " Alias "lstrcpyA " (ByVal lpString1 As String, ByVal lpString2 As Any) As Long
こうね
721:694
12/03/17 22:07:32.08
グーグル先生ってすごい!
クリックで値が取れた!
722:デフォルトの名無しさん
12/03/18 15:07:11.33
>>669
派遣ですか?
正社員がいいのですが
723:デフォルトの名無しさん
12/03/18 15:17:58.27
腐るからやめろよ
724:デフォルトの名無しさん
12/03/18 16:42:41.53
こんにつあ質問ですお
A1-E1に1,2,3,4,5値が振ってあって
A2-E2,A3-E3,....,A100-E100まで数値がランダムに入っています。
このとき各行を、それぞれ列の昇順で並べかえたい。つまりA2-E2,A3-E3,....,A100-E100とそれぞれ昇順に並べかえたいのですが、
そのとき1-5の値の対応を残したいのです。どうすればよいでしょうか!!
725:669
12/03/18 17:09:54.42
>>722
私は正社員ですがパートさんも居ます。
ただ、求人かけてないので・・・
あと、あまり詳しく書くと特定されそうなので
もうこれ以上書かないことにします。
とりあえず大阪府も大阪市も一切関係ない民間企業です。
726:デフォルトの名無しさん
12/03/18 18:18:26.86
>>724
説明が下手すぎて質問が意味不明
727:デフォルトの名無しさん
12/03/18 18:31:41.37
次の国会で青少年ネット規制法通すことにするわ
子どもたちを守るためには必要だよな
728:デフォルトの名無しさん
12/03/18 19:12:42.15
>>724
おりあえず、A2:E2 をソートしたいらしい。
729:デフォルトの名無しさん
12/03/18 19:38:33.54
>>724 とりあえずこれで皆の様子見てみて。
Sub Macro1()
' Version : Excel 2002 VB6.0
Range("A2:E2").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub
730:デフォルトの名無しさん
12/03/18 20:05:11.79
たぶん要点は
>そのとき1-5の値の対応を残したい
だと思うんだが
具体的に何をどうしたいのかがさっぱり解らんな
731:デフォルトの名無しさん
12/03/18 20:42:22.24
え…わたしの説明…ヘタすぎ!?
732:デフォルトの名無しさん
12/03/18 21:06:10.55
んーとですねー
数値が入ってるセルを行毎に昇順で並び変えたときの、順番を取得しまして、
次にその順番を基準に、最初にセルがあった列番号を並べ変えてですね、
さらにそれにセルに入ってた数値を対応させたいのですけど、具体的にすればいいのかはわからなくて行を2行にするくらいしか思いつかないのですのでなにかよい方方法を教えてみて下さいマシマロ
733:デフォルトの名無しさん
12/03/18 21:21:45.79
何言ってんだかさっぱりワカンネ
734:デフォルトの名無しさん
12/03/18 21:28:55.25
ちゃんと説明しようとしない人間の質問に答える必要なし
735:デフォルトの名無しさん
12/03/18 21:40:34.77
下記の様に作成したテキストボックスのShape objectを変数shSelに代入し
て、そこに文字列や書式設定をやりたい。
Sub mkTextBTest02()
Dim shSel As Shape
Set shSel = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
48#, 20 + 16 * lC, 10#, 16#)
shSel.Characters.Text = lC '←$文字列を書く
With shSel.Font '←$フォントの設定
.Name = "MS ゴシック"
.Size = 9
End With
shSel.ShapeRange.Line.ForeColor.SchemeColor = 1 '←$フォントの設定
End Sub
←$印の所でエラーが起きる。
.Characters .Font .ShapeRange は、class Shapeのpropertyでないから。
"ActiveSheet.Shapes.AddTextbox(~).Select"として変数shSelの代わりに、
Selectionと書くとエラーが起きない。
class Shapeのproperty Characters,Font,ShapeRangeを指定するにはどうす
ればいいでしょうか。