Excel VBA質問スレ Part12
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/07/14(火) 19:07:54前スレ http://pc12.2ch.net/test/read.cgi/tech/1241885130/
★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Application』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0002デフォルトの名無しさん
2009/07/14(火) 19:09:0201 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
0003デフォルトの名無しさん
2009/07/14(火) 19:34:280004デフォルトの名無しさん
2009/07/14(火) 20:17:38msgbox "1乙"
loop
0005デフォルトの名無しさん
2009/07/15(水) 07:36:53ポニテ = ”>>1乙”
debug.print ポニテ
0006デフォルトの名無しさん
2009/07/16(木) 08:04:15これは乙なんかじゃなくてなんたらかんたら =FileFile
Open "C:>>1乙.thanks1" for output as これは乙なんかじゃなくてなんたらかんたら
Print これは乙なんかじゃなくてなんたらかんたら ,">>1乙"
Close これは乙なんかじゃなくてなんたらかんたら
0007デフォルトの名無しさん
2009/07/16(木) 11:50:46MicroSoftOfficeEXCEL2007
を使っています。
初歩的な質問で申し訳ないのですが、
ユーザーフォームでListBoxを作って
プログラムの中で、
Dim a As ListBox
と宣言して、
Set a = ListBox1
として実行すると、型が一致しません、とエラーがでてしまいます。
どなたかこのエラーの理由がわかる方いましたら
レスよろしくお願いします!
0008デフォルトの名無しさん
2009/07/16(木) 12:35:55エラーはどこで出てるの? 黄色い矢印はSet a = のところにある?
エラーメッセージは「型が一致しません」で間違いない?
0009デフォルトの名無しさん
2009/07/16(木) 12:54:04レスどうもです!
エラーメッセージは間違いありません。
黄色い矢印は、標準モジュールに書いたユーザーフォームを表示させる
UserForm.Showの命令に出ます。
ユーザーフォームの初期化部分(UserForm_Initialize()内)で
先ほどの代入文を使っているのですが、
メッセージボックスを使ってバグの場所を特定すると、
その代入文でエラーが起きているようなのです。
何か少しでもヒントがあったら
レスいただければ幸いです。
0010デフォルトの名無しさん
2009/07/16(木) 14:29:59Dim a As MSForms.ListBox
としなければならないようです。
0011デフォルトの名無しさん
2009/07/16(木) 14:47:15エラーがなくなりました!
ネット環境がないので助かりました。
どうもありがとうございました!!
0012デフォルトの名無しさん
2009/07/16(木) 14:49:360013デフォルトの名無しさん
2009/07/16(木) 21:47:58Sub test()
With ActiveSheet
Sheets("test").Cells(4, 2).Value = .Cells(19, 3)
Sheets("test").Cells(4, 3).Value = .Cells(18, 3)
Sheets("test").Cells(4, 4).Value = .Cells(116, 3)
Sheets("test").Cells(5, 2).Value = .Cells(19, 5)
Sheets("test").Cells(5, 3).Value = .Cells(18, 5)
Sheets("test").Cells(5, 4).Value = .Cells(116, 5)
Sheets("test").Cells(6, 2).Value = .Cells(19, 7)
Sheets("test").Cells(6, 3).Value = .Cells(18, 7)
Sheets("test").Cells(6, 4).Value = .Cells(116, 7) 〜(以下略
End With
End Sub
0014デフォルトの名無しさん
2009/07/16(木) 21:48:45Sub test()
Dim y As Integer
Dim x As Integer
For y = 4 To 6
For x = 3 To 7 Step 2
With ActiveSheet
Sheets("test").Cells(y, 2).Value = .Cells(19, x)
Sheets("test").Cells(y, 3).Value = .Cells(18, x)
Sheets("test").Cells(y, 4).Value = .Cells(116, x)
End With
Next
Next
End Sub
どなたか、力を貸してください。。。
0015デフォルトの名無しさん
2009/07/16(木) 22:32:200016デフォルトの名無しさん
2009/07/16(木) 22:41:10With ActiveSheet
For row = 4 To 6
Sheets("test").Cells(row, 2).Value = .Cells(19, 2 * (row - 3) + 1)
Sheets("test").Cells(row, 3).Value = .Cells(18, 2 * (row - 3) + 1)
Sheets("test").Cells(row, 4).Value = .Cells(116, 2 * (row - 3) + 1)
Next
End With
0017デフォルトの名無しさん
2009/07/17(金) 00:19:06すみませぬ。
y は期待通りにいってくれましたが、x は3のままでした・・・
>>16
おおおー!
こういうことなんですか!
規則性を見つけ出して、変数をひとつで済むようにする!
勉強になりました! 本当にありがとうございます!
0018デフォルトの名無しさん
2009/07/17(金) 09:45:03バグの元
0019デフォルトの名無しさん
2009/07/17(金) 14:47:06簡易な説明になるしデバッグや拡張に有為
けど慣れてない人とかからはなんで日本語やん言われるんだよな
国内でしか使用しないんだからいいじゃんかよー
0020デフォルトの名無しさん
2009/07/17(金) 18:45:400021デフォルトの名無しさん
2009/07/17(金) 19:58:13昔の名残で、今のほとんどの言語では i を見ればカウントアップ変数と分かるしね。
VBA限定の話ならば、 i は row方向、 j は column方向。ってのが多いんでないかな。
0022デフォルトの名無しさん
2009/07/17(金) 20:09:140023デフォルトの名無しさん
2009/07/17(金) 20:15:19For r = …
For c = …
ってやってる。
オートシェイプやグラフ関係ならx, y
セルと関係ないループだとi, j
0024デフォルトの名無しさん
2009/07/17(金) 20:21:48i--
でデクリメント出来れば文句無いんだけどなあ。
0025デフォルトの名無しさん
2009/07/17(金) 22:18:520026デフォルトの名無しさん
2009/07/18(土) 05:48:09いや、インクリメント、デクリメントは人気あるんですよ。
forの場合はstep-1 で下げられるけど、
doの場合は、i = i+1 ってのがどうもしっくり来ないのだ。
i++ が実装されれば素敵だなぁと。
0027デフォルトの名無しさん
2009/07/18(土) 07:59:48Inc = x + 1
End Function
Function Dec(x)
Dec = x - 1
End Function
002822
2009/07/18(土) 10:09:470029デフォルトの名無しさん
2009/07/18(土) 14:09:060030デフォルトの名無しさん
2009/07/18(土) 14:36:56テキストボックスに日付を入力して、コマンドボタンをクリックで
日付の「月」だけを増やすにはどうすればいいですか?
例)
テキストボックスに日付「2009/7/19」を入力
コマンドボタンをクリック
セルA1に「2009/7/19」
セルA2に「2009/8/19」
セルA3に「2009/9/19」
セルA4に「2009/10/19」
セルA5に「2009/11/19」
セルA6に「2009/12/19」
のような結果にしたいです。
よろしくお願いします。
0031デフォルトの名無しさん
2009/07/18(土) 17:40:02Sheet 1 の Cells(1, 1) 〜 Cells(1, 10) を、Sheet 10 の Cells(1, 1) 〜 Cells(10, 1)に
Sheet 2 の Cells(1, 1) 〜 Cells(1, 10) を、Sheet 10 の Cells(11, 1) 〜 Cells(20, 1)に
Sheet 2 の Cells(1, 1) 〜 Cells(1, 10) を、Sheet 10 の Cells(21, 1) 〜 Cells(30, 1)に
という処理をループでやりたいんですが、うまい処理が思いつきません・・・
ご助力お願いします。
0032デフォルトの名無しさん
2009/07/18(土) 17:55:463番目はSheet3の誤植とみなして
For i = 1 to 3
For j = 1 To 10
WorkSheets("Sheet10").Cells(i * 10 + j - 10, 1) = WorkSheets("Sheet" & i).Cells(1 , i)
0033デフォルトの名無しさん
2009/07/18(土) 17:56:45ループ制御変数
カウンタ
カウンタ変数
好きなのを選べ
0034デフォルトの名無しさん
2009/07/18(土) 17:58:43あと、「Sheet1」じゃなくて「Sheet 1」なの?
WorkSheets("Sheet 10").Cells(i * 10 + j - 10, 1) = WorkSheets("Sheet " & i).Cells(1 , j)
0035デフォルトの名無しさん
2009/07/18(土) 18:01:320036デフォルトの名無しさん
2009/07/18(土) 19:53:10「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」って出てしまうんですけど
0037デフォルトの名無しさん
2009/07/18(土) 19:57:12質問:
ユーザーフォームを使う必要がありますか?シートのどこかのセルに日付を入れて、
シートのどこかに置いたボタンじゃだめですか?(一応フォーム前提でちょっと検討中
ではあるけど)
コマンドボタンクリック1回で、どこまで日付を生成したらいいんですか?
それとも、コマンドボタンをクリックする都度1行ずつ下に日付を出力するんですか?
その場合は、どの行まで出力したかを記憶しておく変数の保存場所がシートのどこか
もしくはユーザーボックスのテキストボックス(日付を入れるものとは別)に書き込ん
でおく必要があります。どういう方法がいいですか?(マクロで保持できるのかな?)
0038デフォルトの名無しさん
2009/07/18(土) 20:26:48いい人ですね、ありがとうございます。無い頭使って下記のようになりました。
textbox1に日付を入力します。
sheet4のi列に月、j列に日を抜き出してc列に日付を入力するように対応しました。
テキストボックスに入力した月から12月までをシートに書き出したいんですが、、、
d = MsgBox("入力しますか?", vbYesNo,)
If d = vbYes Then
y = TextBox1.Value
i = DatePart("m", y)
m = DatePart("d", y)
j = 11 - i
With Worksheets("sheet4")
.Range("f65536").End(xlUp).Offset(0, 3) = i
.Range("f65536").End(xlUp).Offset(0, 4) = m
.Range("c65536").End(xlUp).Offset(1, 0) = i & "月" & m & "日"
End With
For k = h To j
q = Worksheets("sheet4").Range("i65536").End(xlUp)
With Worksheets("sheet4")
.Range("f65536").End(xlUp).Offset(0, 3) = q + 1
.Range("f65536").End(xlUp).Offset(0, 4) = m
.Range("c65536").End(xlUp).Offset(1, 0) = q + 1 & "月" & m & "日"
End With
Next
Else
ユーザーフォームは必須です。
他にいい方法があればお願いします。
0039デフォルトの名無しさん
2009/07/18(土) 20:28:28i = WorksheetFunction.Mid(a, b, c)
とは
i = Mid(a, b, c)
こうかけるけど、
F2で検索してもワークシート関数としてのMidは引っかからなかった。
あえてワークシート関数として使うことは無理かと。
0040デフォルトの名無しさん
2009/07/18(土) 20:30:37!!そんなシンプルでよかったんですね
助かりました。ありがとうどざいます。
004138
2009/07/18(土) 20:31:35抜けがありました。
h = Worksheets("sheet4").Range("c65536").End(xlUp).Offset(1, 0)
0042デフォルトの名無しさん
2009/07/18(土) 20:40:09できました! ありがとうございます!
Sheet名は、おっしゃる通りです。また、Sheet1, 2, 3 と書くつもりが 1, 2, 2 とやってしまいました・・・ 意図を汲んでいただき、本当に感謝しています。
ネストというのは、こういうふうに使うものなんですね。もっといろいろ精進します!
0043デフォルトの名無しさん
2009/07/18(土) 21:36:45004437
2009/07/18(土) 21:44:39日付をyyyy/m/d形式でテキストボックスに入力するという前提で作って見ました。
ユーザーフォームのコマンドボタン1のスクリプトです。
Option Explicit
Private Sub CommandButton1_Click()
Dim ary_date As Variant
Dim tate As Long, tuki As Integer
ary_date = Split(UserForm1.TextBox1, "/")
If UBound(ary_date) <> 2 Then ' 要素が3個あるか
GoTo ERR_PROC
End If
tate = ActiveSheet.Range("C65536").End(xlUp).Row + 1 '出力開始行
On Error GoTo ERR_PROC
For tuki = ary_date(1) To 12
ActiveSheet.Cells(tate, 3).Value = _
DateValue(ary_date(0) & "/" & tuki & "/" & ary_date(2))
tate = tate + 1
Next tuki
Exit Sub
ERR_PROC:
MsgBox ("日付が正しくありません")
End Sub
以上
splitコマンドで日付データから年、月、日の3要素を一度に配列に格納できて便利です。
004530
2009/07/18(土) 22:08:54確認しました。
コードの意味がよく分からないので理解できるまで調べてみます。
ありがとうございました!
004630,44
2009/07/18(土) 22:26:25おことわり・・・当方Excel2003なので、ひょっとすると不具合がでるやもしれません。
バージョン2000と2003のVBAの機能の違いについてはよくわかりません、あしからず。
それから、テキストボックスに入力した文字列が日付として正しいかどうかはチェック
してません。
また、「月」だけを単純に増やしていくと、月末の違いで途中で「日付が正しくない」
と表示して終わる場合があります。(9月や11月に31日は存在しない)
004730
2009/07/18(土) 22:39:03親切にどうもです。
テキストボックスは入力制限してあるので大丈夫です。
>>44のコードを理解して幅が広がれば、と思います。
ありがとうございました。
004830
2009/07/18(土) 22:42:58>と表示して終わる場合があります。(9月や11月に31日は存在しない)
これ盲点でした。。
ちょっと考えてみます。
0049デフォルトの名無しさん
2009/07/19(日) 00:46:11Dim DateInputRange As Range, d%, i&
On Error Resume Next
d = MsgBox("入力しますか?", vbYesNo)
If d = vbYes Then
'入力判定
If Not IsDate(TextBox1.Value) Then
MsgBox "節子!それ日付と違う!": Exit Sub
End If
'入力開始セル取得
Set DateInputRange = Worksheets("Sheet1").Range("C65536").End(xlUp).Offset(1)
'入力開始
For i = 0 To (12 - Month(TextBox1.Value))
DateInputRange.Offset(i).Value = DateAdd("m", i, TextBox1.Value)
'月とか日が別で欲しいなら、適当に以下のような感じで
'DateInputRange.Offset(i, 1).Value = Month(TextBox1.Value) & "月"
Next
End If
If Err.Number <> 0 Then MsgBox Err.Description 'なんかエラーが発生したとき用
Textbox1の入力をどのようにしているのか判断できないので
半角全角混在や和暦西暦などでもいけるようにしてみた
DateAddなので、>>44のコードと違い指定日が月の範囲を超えると月末になる(1月31日指定→2月28日)
あと、セルの表示は表示形式で対応するればいんじゃね
入力に「年」を省いた場合は、強制で入力した年になるので注意
日付入力は、DTPickerとか使えれば楽かも
0050デフォルトの名無しさん
2009/07/19(日) 00:50:29005130
2009/07/19(日) 02:22:36なにが書いてあるのかさっぱりですが。。
なにかと都合がいいので、日付のテキストボックスを開始月と支払日でそれぞれコンボボックスで
対応するように仕様変更しました。ごめんなさい。
On Errorは使ったことがありませんでしたが、覚えたほうが良さそうですね。
>>38も含めて理解できるよう頑張ってみます。
ただ別件でまた問題が、、、折れそうです、、、
005330
2009/07/19(日) 02:39:33日付のコンボボックスを「1〜28、月末」で変更するつもりでしたが、
少しでも軽くしたいのと月末を選択したときの対応が大変なので>>49を
使わせてもらうかもしれません。
ちょっと疲れたので寝ます。。
0054デフォルトの名無しさん
2009/07/19(日) 02:56:370055デフォルトの名無しさん
2009/07/19(日) 08:39:33として、ABC1.TXTというファイルを開くときに
Open "FFT1.txt"
ではなく、iを使って開けるようにしたいのですが、どんな風にファイル名を
書けばよいでしょうか。
0056デフォルトの名無しさん
2009/07/19(日) 08:43:43005755
2009/07/19(日) 08:50:46ありがとうございます。
Open "ABC" & i & ".txt"
でいけました。
005830,44,46
2009/07/19(日) 09:25:39月末というか、大の月・小の月対策が必要ならば
次の要件を満たすような処理を考えてみましょうか?
テキストボックスに入力した日付の「日」が翌月以降の月末に存在しない場合、
当月に限り月末を補正するが、その翌月以降には影響しない。
例 **/1/30 と入力したら **/2/28、**/3/30、・・・
0059デフォルトの名無しさん
2009/07/19(日) 11:55:32>>58
お付き合いありがとうございます。
実は、パチンコやゲームで時間とお金を使うより有意義と感じてVBAを使用したソフトを作っています。
VBEditorの開き方も分からないところから作り始めました。
暇つぶし感覚で始めたソフト作成をある意味RPG的に楽しんでいます。
3連休中にある機能を追加しようと考えていましたが、自分のレベルではかなり難しくて。。
日付の仕様ですが、日付のテキストボックスは開始月と支払日でそれぞれコンボボックスで対応するのが理想です。
その場合、開始月のコンボボックスは「1月〜10月」、支払日のコンボボックスは「1日〜28日、月末」にする予定です。
支払日で「月末」を選択した場合、開始月のコンボボックスを見て支払日の月末を割り出そう考えています。
適当なシートに「」A1→1月」「B1→31日」、「A2→2月」「B2→28日」・・・という感じでデータを書いて、それを参照して
月末の支払日を算出しようと検討中です。
きっと>>58の案はもう書かれてそうですので参考に教えてもらっていいですか?
006030,44,46,58
2009/07/19(日) 12:44:02うるう年を考えなくていいなら、12個の要素の配列に月末日を持っておいて
生成しようとする「月」毎に判定したらいいのでは?
dim 末日 as variant
〜
末日 = Array(31,28,31,30,31,30,31,31,30,31,30,31) '始めに設定しておく
〜
if 出力日 > 末日(月 - 1) then 出力日 = 末日(月 - 1) 'ループ処理の中
〜
うるう年を考慮するなら、うるう年判定して 末日(2 - 1) = 29 を追加するだけ
※要素数は12でも、要素番号(添え字)は0から始まる option base無指定のとき
006137,44,46,58
2009/07/19(日) 12:56:11自分は10年ほど前までは汎用機相手にCOBOLでプログラム開発してましたが、
移動で別の部署に移ってからは職場のPC相手にExcelVBAで省力化してました。
退職した今はボケ防止でExcelやOOo関係のスレに出没してます。
業務処理では日付関係のいろいろ(期間計算、新年号、2000年問題も)で苦労したので、
念のため大・小の月のことをコメントしてみたんです。
0062デフォルトの名無しさん
2009/07/19(日) 13:10:453連休中に機能の追加は諦めました。orz
今の知識では無理なので、もう一度本を見ながら基礎から覚えていこうと思います。
>>60は参考にさせていただきます。
ありがとうございました。
対応できたら報告します。;
0063デフォルトの名無しさん
2009/07/19(日) 14:21:33>>対応できたら報告します。;
要りません。
0064デフォルトの名無しさん
2009/07/19(日) 15:05:54半月も弄ってれば大抵誰でも出来るようになる処理だし
006537,44,46,58,61
2009/07/19(日) 20:03:10ユーザーフォームとかコンボボックスとか扱ってるレベルならわかってもらえると思ったんだけど・・・
自分はコンボボックスとかラジオボタンとかまだほとんど使ったことがないorz
0066デフォルトの名無しさん
2009/07/19(日) 21:14:58エスパーさんまとめてくれ。
0067デフォルトの名無しさん
2009/07/19(日) 21:35:01大の月とかなんとか↑で話題になってるみたいですけど
月末日は「翌月」の「1日」から1を引けば簡単に出てくるものと思ってましたけど・・・
的外れな発言してたらすいませんおじゃましました・・・
0068デフォルトの名無しさん
2009/07/19(日) 22:27:410069デフォルトの名無しさん
2009/07/19(日) 22:38:36debug.print DateSerial(2009,12,0)
で11月の末日がでる。
0070デフォルトの名無しさん
2009/07/19(日) 22:45:03うぁお
そんな裏技が!
あまりに裏技すぎても思わぬバグがこわいけどこれは大丈夫なのかな?
0071デフォルトの名無しさん
2009/07/19(日) 22:56:320日が使えるのと同じで、0月とか13月も普通に「前月」「翌月」として使うことができる。
さらにマイナスも使える。-1月は前年の11月になる。
0072デフォルトの名無しさん
2009/07/19(日) 23:04:20試してみたらワークシートのDATE関数でも使えるのな(2007で実験)
さすがエロい人はいるもんだ
007337他
2009/07/19(日) 23:06:20その方法は知ってます。「OpenOffice.org 総合相談所 6」の420は自分なんですが、
翌月の〜ということは12月のときは1月のことになり、ややこしくなるので
ループ内は一番単純なこの方法をとりました。
>69
>DateSerial(yyyy,mm,0)という指定もアリなんですか? こちらもmmは翌月のこと
なので上と同じ理由で避けました。
0074デフォルトの名無しさん
2009/07/19(日) 23:09:02007537他
2009/07/19(日) 23:09:17アップ前にリロードしてなかった。月の部分は1〜12限定じゃなかったんですか。
007662
2009/07/19(日) 23:13:52やりたかったことは、ユーザーフォームのテキストボックスに入力した日付を
コマンドボタンをクリック後に、日付の月から12月分までを月だけ増やしてSheet4に書き出したかった。
コンボボックスの月が9月10日ならコマンドボタンをクリック後に、
C22→9月10日
C23→10月10日
C24→11月10日
C25→12月10日
といった感じです。
で、日が31日の場合、2月や4月はエラーになる問題がどうするか保留です。
現在は、日付をテキストボックスではなく、コンボボックスを2個用意して、月と日を別で
入力する仕様で検討中です。
諦めた理由は別件で問題があったからです。
ユーザーフォームを開いたときに、↑でシートに書き出したデータが現在の月であれば
Sheet1にコピーする方法が分からずに諦めていましたが、買物から帰ってきて、
ぼーっと本を見ていたら解決しました。。。下記コードでなんとかなりそうです。
If Worksheets("sheet4").Range("c22") <> "" Then
For hi = 22 To 1000
If Worksheets("sheet4").Cells(hi, 9).Value = Month(today) Then
With Worksheets("sheet1")
.Range("c65536").End(xlUp).Offset(1, 0) = Worksheets("sheet4").Cells(hi, 9).Offset(0, -6).Value
End With
End If
Next hi
End If
(実際のデータは日付だけではありません)
これで分かります?
007762
2009/07/19(日) 23:15:190078デフォルトの名無しさん
2009/07/19(日) 23:18:02excel vba dateserial でググると最初に出てくる「田中亨のVBA基礎セミナー」他
いくつかみてみたけど、通常の範囲外の値を指定する裏技は見ませんでした。
よろしければ、この裏技を紹介しているウェブサイトを紹介してもらえませんか?
0079デフォルトの名無しさん
2009/07/19(日) 23:24:300080デフォルトの名無しさん
2009/07/19(日) 23:28:40> よろしければ、この裏技を紹介しているウェブサイトを紹介してもらえませんか?
あなたが今いてるここですよ。
色んな知識を持って回答してる皆さんに失礼がないかもう一度このスレを最初からご覧になってはいかがです?
別に私はあなたを排除するつもりはないのでそれなりの礼節を(たかが2ちゃんだからたいしたことないです)わきまえて質問を続けて下されば嬉しいですけどね
0081デフォルトの名無しさん
2009/07/20(月) 01:08:24つか、Webにある情報だけが全てじゃないしw
実地で学んだことをここで吐き出してあげてんだよ
0082デフォルトの名無しさん
2009/07/20(月) 01:50:23> 12月のときは1月のことになり
除余(Mod)使えば良いだけじゃん
DateSerial(y + m \ 12, m Mod 12 + 1, 0)
なんでこんな簡単なことが解らないんだ?
除余(割り算の余り)や整数商なんて小学4年生くらいのレベルだろ?
向こうの回答もその部分にバグがある内容だし
0083デフォルトの名無しさん
2009/07/20(月) 02:22:560084デフォルトの名無しさん
2009/07/20(月) 03:02:46ぶつくさいいながらも使いやすそうなコード教えてくれるおまい優しいなw
0085デフォルトの名無しさん
2009/07/20(月) 08:47:210086デフォルトの名無しさん
2009/07/20(月) 09:05:550087デフォルトの名無しさん
2009/07/20(月) 17:22:16ユーザーフォームに6個のオプションボタンを配置し、3つまで選択可能にしたいです
これは可能なのでしょうか?
できるなら、方法を教えてください
プロパティをいじってみたけど上手くいきませんでした
0088デフォルトの名無しさん
2009/07/20(月) 17:32:040089デフォルトの名無しさん
2009/07/20(月) 17:39:13・押された時のイベントで全部のボタン調べて3つ以上チェック入ってたらキャンセル
でどうだろう
コードはわかんね
0090デフォルトの名無しさん
2009/07/20(月) 17:43:06普通はオプションボタンは、一つを押すと他の唯一あるTrueの奴が消えることになる。
たとえば、
○○●●●○
のとき、
一番左のを押すとどれをFalseにすればいいかわからないから、根本的に無理のはず。
やりたいなら、チェックボックス6個に
Trueにしたときに、
それをあわせてTrueが3つになったらなら
他のFalseなチェックボックスを選択不能にする。
Falseにしたときに、
他のチェックボックスを選択可能にする。
的なことを書けばいいと思う。
0091デフォルトの名無しさん
2009/07/20(月) 17:46:44たとえば暇つぶしに作った業務システムが知らないうちに改修されてて、
コメントしたアニメセリフとかエロ話とか上司の悪口とかを書いてて、
しかもそれが削除されないまま全社配布されたとかそんなの?
0092デフォルトの名無しさん
2009/07/20(月) 17:48:09フレームの非表示って出来たっけ
0093デフォルトの名無しさん
2009/07/20(月) 18:03:36これを使わせていただきます。
コードが1/3以下になりました。
他、レスしてくれた方もありがとうございました。
0094デフォルトの名無しさん
2009/07/20(月) 18:08:01プロパティのvisibileをfalseにすれば良いんじゃね?
0096デフォルトの名無しさん
2009/07/20(月) 20:58:53Excel2003
を使用しております。
エクセルにボタンを追加して、
Sub Botton_Click()
'Book1を開く
Workbooks.Open "C:\Book1.xls"
'Book2にあるSheet1をBook1のSheetにコピー
Workbooks("Book2.xls").Worksheets("Sheet1").Copy _
After:=Workbooks("Book1.xls").Worksheets("Sheet1")
End Sub
といった感じにボタン押下時に別なブックにシートをコピーしたいのですが
「インデックスが有効範囲にありません」
というエラーが出てしまいます。
VBA初心者で初歩的な質問で申し訳ありませんが、どのようにすれば宜しいでしょうか?
0097デフォルトの名無しさん
2009/07/20(月) 21:10:080098デフォルトの名無しさん
2009/07/20(月) 21:28:31アクティブにするのを見落としてました・・・
ありがとうございましたm(__)m
0099デフォルトの名無しさん
2009/07/20(月) 21:38:55Book2.xlsが開いててシート名も間違いなければそのままでなぜ駄目なのか?
0100デフォルトの名無しさん
2009/07/20(月) 21:47:43でBook2が非アクティブになったためか、
Workbooks("Book2.xls").Worksheets("Sheet1").Copy _
After:=Workbooks("Book1.xls").Worksheets("Sheet1")
Sheet1が2つあるためか
0101デフォルトの名無しさん
2009/07/20(月) 23:37:54・WindowsXp
・Excel2003
sub 修正()
On Error Resume Next
Dim i as Integer
For i 136 to 140 step 1
If Range("AT7").value=Range("C"&i) then
Select Case Range("AT7").value
Case "お菓子"
Range("AT7").Activate
Activecell.offset(-43,-4).Activate ←ここでB6がアクティブにならない
Activecell.value="お菓子購入"
End Select
End If
Next
End sub
上記のコードで矢印の部分「Activecell.offset(-43,-4).Activate」でB6がアクティブにならず、
AT7がアクティブのまま「お菓子購入」が入力されてしまいます。何が原因でしょうか?
すみませんがよろしくお願いします。
0102デフォルトの名無しさん
2009/07/20(月) 23:58:260103デフォルトの名無しさん
2009/07/21(火) 00:00:05Activecell.offset(-4,-43).Activat
にしてみ
0104デフォルトの名無しさん
2009/07/21(火) 00:15:040105デフォルトの名無しさん
2009/07/21(火) 00:17:38参考書に書いてあったのでよく分からないままいつも使ってたんですが
初心者はあまり使わないほうがいいんでしょうか?
>>103
>>104
ありがとうございます。RowとColumnを逆にしてたんですね。初歩的なミスで質問してしまってすみませんでした
0106デフォルトの名無しさん
2009/07/21(火) 00:26:190107デフォルトの名無しさん
2009/07/21(火) 01:20:19もう見てないかもしれないけど「Activate〜Active」とか「Select〜Selection」が並んでいた場合は
1行にまとめて書けることが多い。
Range("AT7").Activate
Activecell.Offset(-1, -44).Activate
Activecell.Value = "お菓子購入"
↑この3行は1行にまとめられる。↓
Range("AT7").Offset(-1, -44).Value = "お菓子購入"
0108デフォルトの名無しさん
2009/07/21(火) 13:36:15Sub ソルバーループ()
With Worksheets("jack")
For i = 1 To 10
With Worksheets("jack")
Solverok setcell:="$E$1", MaxMinVal:=2, ByChange:="$A$2:$D$2"
‘目的セルをE1として、その最小値を求める。変数はA2:D2。
SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="$G$1"
SolverSolve Userfinish:=True
SolverFinish KeepFinal:=1
Worksheets("Sheet1").Cells(i + 0, 5) = Worksheets("jack").Cells(1, 5)
Worksheets("Sheet1").Cells(i + 1, 1) = Worksheets("jack").Cells(2, 1)
Worksheets("Sheet1").Cells(i + 1, 2) = Worksheets("jack").Cells(2, 2)
Worksheets("Sheet1").Cells(i + 1, 3) = Worksheets("jack").Cells(2, 3)
Worksheets("Sheet1").Cells(i + 1, 4) = Worksheets("jack").Cells(2, 4)
End With
Next
End With
このプログラムのなかの
SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="$G$1"
という制約条件で、$G$1 を $G$10 まで変化させていき、各制約条件ごとに一つずつ
結果をワークシートのsheet1に書き込んでいきたいのですが
SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="$G$1"の部分に
どのようにして i を組み込めばいいでしょうか?
ほんの少しのヒントでも非常に有難いので、お力添えくだされば幸いです。
皆様お忙しいでしょうが、どうぞよろしくお願いいたします。。。
0109デフォルトの名無しさん
2009/07/21(火) 13:43:380110デフォルトの名無しさん
2009/07/21(火) 15:27:22この機能自体を使用禁止にすることって出来ますか?
0111デフォルトの名無しさん
2009/07/21(火) 16:21:06&
0112デフォルトの名無しさん
2009/07/21(火) 17:13:53C列に"abc"という文字列があった場合、その行全体を削除し
上に詰めるというマクロを組みたいのですが
どなたか教えていただけますでしょうか。
尚、オートフィルタを使わないやり方でお願い致します。
0113デフォルトの名無しさん
2009/07/21(火) 17:23:40左じゃなくて?
0114デフォルトの名無しさん
2009/07/21(火) 17:28:011.C列に文字列abcがあるなら行削除
2.配列に
0115デフォルトの名無しさん
2009/07/21(火) 17:30:25Sub aaa()
For a = 1 To 4000
If Cells(a, 3) = "abc" Then Rows(a).Delete shift:=xlUp
Next
End Sub
0116デフォルトの名無しさん
2009/07/21(火) 17:39:44Sub a()
For r = ActiveCell.SpecialCells(xlLastCell).Row To 1 Step -1
If Cells(r, 3) = "abc" Then Rows(r).Delete
Next
End Sub
>>115
上からだとabcが連続していた時に消えない
0117デフォルトの名無しさん
2009/07/21(火) 17:41:30これだと2行つづいて"abc"があった場合抜けてしまわない?
オートフィルタを使った方法を教えて欲しい
0118デフォルトの名無しさん
2009/07/21(火) 17:47:510119デフォルトの名無しさん
2009/07/21(火) 18:11:41そんなの余裕だろうが。
SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="G(1+i)"
で一発だ。
0120108
2009/07/21(火) 19:24:43ヒントをどうもありがとうございます。
ただ、&の意味がわからないのですが、どういうことでしょうか?
$だと固定だから&にしろということでしょうか・・・?
無知ですいません。
0121デフォルトの名無しさん
2009/07/21(火) 19:30:31"$G$" & i
&は文字列の結合
0122108
2009/07/21(火) 21:36:02無事プログラムがうまく動きました!
どうもありがとうございます!
0123デフォルトの名無しさん
2009/07/21(火) 21:38:52Dim 本日 As Date
本日 = Date
日数 = DateDiff("d", "2009/7/10", "本日")
とやったところ、型が一致しませんとでます。
本日までの日数を求めたいのですがどうすればいいのでしょうか?
0124デフォルトの名無しさん
2009/07/21(火) 21:44:33>>117
sub オートフィルタを使った方法()
Dim 元シート as WorkSheet,作業シート as WorkSheet
Set 元シート=ActiveSheet
元シート.Copy
Set 作業シート=ActiveSheet
作業シート.Range("C1").AutoFilter 1,"<>""*abc*"""
作業シート.Cells.SpecialCells(xlCellTypeVisible).Copy 元シート.Cells.
作業シート.Parent.Close False
End sub
0125デフォルトの名無しさん
2009/07/21(火) 21:47:28"本日" w
0126デフォルトの名無しさん
2009/07/21(火) 21:47:51変数の本日にはダブルクォーテーションいらんよ
「本日」という文字列は計算できんじゃろ
0127デフォルトの名無しさん
2009/07/21(火) 22:08:31日数 = DateDiff("d", "2009/7/10", "本日")
は
日数 = DateDiff("d", "2009/7/10", Now)
日数 = DateDiff("d", "2009/7/10", Date)
0128124
2009/07/21(火) 22:12:34あとクライテリアの*abc*を囲う必要があったかなかったか自信ない
0129デフォルトの名無しさん
2009/07/21(火) 22:37:38けつからやんのか。頭良いな。
0131デフォルトの名無しさん
2009/07/22(水) 00:02:50基本中の基本。
君の頭が○○なだけです。
0132デフォルトの名無しさん
2009/07/22(水) 00:21:450133デフォルトの名無しさん
2009/07/22(水) 01:32:28おまえにいってねえからwww
0134デフォルトの名無しさん
2009/07/22(水) 18:03:460135デフォルトの名無しさん
2009/07/22(水) 23:04:58ワロスw
0136デフォルトの名無しさん
2009/07/23(木) 00:42:00(Microsoft XML version2.0使用)
Sub xml()
Dim aaa As Integer
aaa = "001"
Dim bbb As String
bbb = "001"
Dim xmlDoc As MSXML.DOMDocument
Dim xmlPI As IXMLDOMProcessingInstruction
Dim node(3) As IXMLDOMNode
Dim attr As MSXML.IXMLDOMAttribute
Set xmlDoc = New MSXML.DOMDocument
Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""))
Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "TEST", ""))
Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "test1", "")): node(2).Text = aaa
Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "test2", "")): node(2).Text = bbb
'作成されたxml確認用
xmlDoc.Save ("test.txt")
End Sub
�@set nodeに入れたaaaとbbbですが、1と表示されてしまいます。001と表示するにはどうしたら良いのでしょうか。
�A作成された値(xml)を特定のURLへ送信したいのですが、どのライブラリ?等を利用すれば宜しいでしょうか
(値を送ると、<result>NG</result>といった値が返却される予定です)
すみませんがお力添え頂けると幸いです。
0137デフォルトの名無しさん
2009/07/23(木) 02:07:25Excel 2007 + MSXML3 (MSXML2がなかった)とVBScript 5.0 + MSXML2 (Officeがなかった)の2環境でやってみたが、
いずれもbbbのほうは001になったぞ。
それをHTTPで送りたいのなら、MSXML.XMLHTTPRequestを使えばいい。
0138デフォルトの名無しさん
2009/07/23(木) 03:52:34-----------------------------------
Dim 値 As Integer
値 = Range("A1")
Range("A1").FomulaR1C1 = "COUNTA(R[1]C[1],R[1]C[10])" 'A行
Range("A1").Copy
Range("A1").PasteSpecial (xlCellTypeValue)
Range("B1").Activate
Activecell,offeset(1,値).Select 'B行
---------------------------------------------------------
上記のようなコードで実行するとA行で集計されたはずの数値がB行に来た段階で代入されていないようなのですが、
変数というのは、宣言の時点で代入される数値が決まっていないといけないのでしょうか?
0139デフォルトの名無しさん
2009/07/23(木) 06:29:56いこーるつけなさい
0140デフォルトの名無しさん
2009/07/23(木) 07:47:58エスパーするとやりたいのはこういうこと?
Dim 値 As Integer
値 = WorksheetFnction.CountA(Range("B2:K2"))
Range("B1").Offeset(1,値).Select
質問に直接答えれば宣言はいつしてもいいけど変数の使い方がおかしい
Integer→Rangeに変えてSet 値 = Range("A1")
最後の行をActiveCell..Offeset(1,値.Value).Select
0141デフォルトの名無しさん
2009/07/23(木) 18:06:57Activecell,offeset(1,値).Select 'B行
↑
点の種類間違ってる
最後の行はたぶんoffeset→offset
クライマックスの2行まとめて
Cells(2,2+値).Select 'ともかけるます
>>140
変数の使い方はあってない?
Range("A1")
を取得すると
Range("A1").Value
を返すしIntegerで足りるし
値.Copy とかやるでもないし
0142デフォルトの名無しさん
2009/07/23(木) 18:36:20赤丸(背景色は透明)を作りたいのですが、背景色を透明にできません。
Shape.Line.BackColorの編集でできそうなのですが、検索方法が悪いのか見つかりません。(この予測は間違いですか?)
Dim myShape As Shape
With ThisWorkbook.Worksheets("Sheet1")
Set addCell = .Cells(intRow, intCol)
Set myShape = .Shapes.AddShape(msoShapeOval, addCell.Left, addCell.Top, addCell.Width, addCell.Height)
myShape.Line.ForeColor.RGB = RGB(255, 0, 0)
myShape.Line.Weight = 2
End With
よろしくお願いいたします。
0143デフォルトの名無しさん
2009/07/23(木) 18:48:15myShape.Fill.Visible = msoFalse
0144デフォルトの名無しさん
2009/07/23(木) 19:52:54無事、透明になりました。ありがとうございます。
0145デフォルトの名無しさん
2009/07/23(木) 22:14:47あっ、そういう風に見れば
間違ってるのは変数「値」にA1の値を代入するタイミングだな
0146デフォルトの名無しさん
2009/07/23(木) 23:31:01ありがとうございます!
0147デフォルトの名無しさん
2009/07/25(土) 12:07:00コンボボックス2個、テキストボックス1個、コマンドボタンのユーザーフォームで
シートに以下の図のようにデータがあります。
コンボボックス1にA列の値、コンボボックス2にB列の値を入れて、
コマンドボタンを実行すると、該当するC列の値をテキストボックスに表示する
にはどうすればいいですか?
A B C
1 ああ カカ 100
2 ああ キキ 200
3 ああ クク 300
4 いい ケケ 400
5 いい ココ 500
コンボボックス1に「ああ」、コンボボックス2に「クク」なら
テキストボックスは「300」になるようにしたいです。
よろしくお願いします。
0148デフォルトの名無しさん
2009/07/25(土) 12:24:060149デフォルトの名無しさん
2009/07/25(土) 12:35:450150デフォルトの名無しさん
2009/07/25(土) 12:44:080151デフォルトの名無しさん
2009/07/25(土) 12:48:49ここでROMがお奨め(;゚д゚)ァ
0152デフォルトの名無しさん
2009/07/25(土) 13:27:13あああ, ううう, えええ, くくく, ・・・
いいい, , おおお, けけけ, ・・・
, , かかか, , ・・・
, , ききき, , ・・・
(最大:行=65535)
とあった場合、
項目1, 項目2, 項目3, 項目4・・・
あああ, ううう, えええ, くくく
いいい, ううう, おおお, くくく
あああ, ううう, かかか, くくく
いいい, ううう, ききき, くくく
あああ, ううう, えええ, けけけ
いいい, ううう, おおお, けけけ
あああ, ううう, かかか, けけけ
いいい, ううう, ききき, けけけ
・
・
・
のように、データを詰めて別のシートの同じ位置(例:A1)から出力したいです。
※行・列は可変データです。
0153デフォルトの名無しさん
2009/07/25(土) 13:29:47151もおすすめだけど「体系的」ではないわなw
確かスレ違いだったと思うから紹介はしないが適当にググればいくつか出てくるからサイトさがしはそんなに難しくない
本買うなら最初はあまり分厚いのでなくて初心者向けの簡単な入門書やってみれば
自分が身につけたいことが見えてきて次に本買うときは自分の好みに合った本選びできる
0154デフォルトの名無しさん
2009/07/25(土) 13:37:24excel vba 入門 に一致する日本語のページ 約 183,000 件中 1 - 10 件目 (0.35 秒)
0155デフォルトの名無しさん
2009/07/25(土) 13:39:59これって
丸投げというか、依頼じゃね
何がわからないか書かないと答えられないだろ
0156デフォルトの名無しさん
2009/07/25(土) 13:45:47nhngdおk
0157デフォルトの名無しさん
2009/07/25(土) 13:59:52この例だとfor〜nextループ4重で行数は2×1×4×2=16行。
組み合わせの問題で項目数が不定ということは再帰処理ができるとわかりやすいんだろうけど・・・・
「excel vba 再帰」でググったら再帰プログラムができるらしい。
ひとつ間違えると無限ループになるし、項目数最大256個が大丈夫なのか、やってみないと
なんともいえない。
0158157
2009/07/25(土) 17:28:56行基準(再帰処理)でやろうとしたら、こんがらがってしまい中断。列基準だとなんかできそう。
先に列数(4)と、列毎の行数を調べ、配列に設定。この際添え字は0〜列数+1とし、
配列(0)と配列(列数+1)の内容は1にしておく。
その結果、配列(0)=1、配列(1)=2、配列(2)=1、配列(3)=4、配列(4)=2、配列(5)=1 となる。
左端列(A列:列番号1)は当該列の要素("あああ"、"いいい"の2種類をそれぞれ左側の組み合
わせ数1回繰り返したものを右側の組み合わせ数(1×4×2=)8回出力する。
→あああ、いいい を8回
B列(列番号2)は当該列の要素("ううう")の1種類をそれぞれ左側の組み合わせ数2回繰り返した
ものを、右側の組み合わせ数(1×4×2=)8回出力する。
→ううう、ううう を8回
C列(列番号3)は当該列の要素("えええ"、"おおお"、"かかか"、"ききき")の4種類をそれぞれ
左側の組み合わせ数2回繰り返したものを、右側の組み合わせ数2回出力する。
→(えええ を2回、おおお を2回、かかか を2回、ききき を2回)を2回
D列(列番号4)は当該列の要素("くくく"、"けけけ")の2種類をそれぞれ左側の組み合わせ数
8回繰り返したものを、右側の組み合わせ数1回出力する。
→くくく を8回、けけけ を8回
列数がNで、n列目の出力を考えた場合、
要素数は 配列(n)
左側の組み合わせ数は 配列(0)×配列(1)×・・・×配列(n−1)
A列の場合も配列(0)=1があるので計算に支障なし
右側の組み合わせ数は 配列(n+1)×・・・配列(N−1)×配列(N)
最右列の場合も配列(N+1)=1があるので計算に支障なし
0159157
2009/07/25(土) 17:35:38>152の例だと「項目3」が えええ、おおお、かかか、ききき、えええ、・・・という
順番だけど、えええ、えええ、おおお、おおお、かかか、かかか、ききき、ききき・・・の
並びの方が組み合わせ順としては自然だと思う。項目4も同様に同じものが8回ずつ繰り返す
ことになります。
>152 ここまで示したらできますか?
0160デフォルトの名無しさん
2009/07/25(土) 18:55:00格納用の配列(65534、254)を用意
ソート用の配列(65534、0)を用意
列をカウントする変数iを用意
for i=0to254
ソート用の配列に列データを格納、ソート
格納用の配列(65534、i)にソートしたデータを格納
最後にシートに格納した配列を流し込む
0161デフォルトの名無しさん
2009/07/25(土) 20:12:03死ぬほど遅いけどこういうことか?
Sub test()
For Each c In Range(Cells(1, 1), Cells(65535, 255))
If (c.Value = Empty And c.Rows > 1) Then
c.Value = c.Offset(-1, 0).Value
End If
Next
End Sub
0162デフォルトの名無しさん
2009/07/25(土) 21:10:281.まず、項目1...nの要素を数える
2.数えた要素を掛け算、K1xK2x...xKn
3.2.で得られた数値が必要な行数なので、
各項目ごとに各要素で必要行数だけ埋める
0163162
2009/07/25(土) 21:13:152.数えた要素の、最小公倍数を求める
0164162
2009/07/25(土) 21:16:14だれか、2.の正解を頼む
0165162
2009/07/25(土) 21:18:270167デフォルトの名無しさん
2009/07/26(日) 00:54:28・WindowsVista
・Excel2002
A1〜A10の合計をC2に表示させるマクロを作りたいのですが上手くいきません。
自分で作ったのは以下の通りです。
Sub practice()
Dim i As Integer
For i = 1 To 10
Cells(2, 3) = Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1)
Next i
End Sub
アドバイスを頂けると助かります。
よろしくお願いします。
0168デフォルトの名無しさん
2009/07/26(日) 01:01:070169デフォルトの名無しさん
2009/07/26(日) 01:12:49上手くいかないというのは合計の値がオートSUMで計算した合計と一致しないということです。
0170デフォルトの名無しさん
2009/07/26(日) 01:21:21Sub practice()
Dim i As Integer
Dim sum as Integer
sum = 0
For i = 1 To 10
sum = sum + Cells(i, 1)
Next i
Cells(2, 3) = sum
End Sub
0171デフォルトの名無しさん
2009/07/26(日) 01:26:42元マクロ無視して書けばこういうこと?
Sub practice()
range("c2") = worksheetfunction.sum(range("a1:a10"))
End Sub
0173デフォルトの名無しさん
2009/07/26(日) 03:50:400174デフォルトの名無しさん
2009/07/26(日) 08:32:130175デフォルトの名無しさん
2009/07/26(日) 09:25:18と>>1に書いたとしても、読みもしないんだろうなぁ。
0176デフォルトの名無しさん
2009/07/26(日) 09:33:220177デフォルトの名無しさん
2009/07/26(日) 13:48:35Excelで店舗の営業日報を作れるデータを作成しました。
他人がそのデータを使うワケなのですが、
データに打ち込んで、上書き保存などはできるが、
データそのものを複製やコピーする事を防止する事は可能ですか?
また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか?
あるとすればどのような手段でデータをその人に預ければよいのでしょうか。
わかりずらいかも知れませんが
よろしくお願いしますm(__)m
0178デフォルトの名無しさん
2009/07/26(日) 14:00:33マルチ 芯でください
0179デフォルトの名無しさん
2009/07/26(日) 16:08:32で、マルチならどこなのか晴れYO
0180デフォルトの名無しさん
2009/07/26(日) 16:09:31よろしくお願いしますm(__)m
Excelで店舗の営業日報を作れるデータを作成しました。
他人がそのデータを使うワケなのですが、
データに打ち込んで、上書き保存などはできるが、
データそのものを複製やコピーする事を防止する事は可能ですか?
また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか?
あるとすればどのような手段でデータをその人に預ければよいのでしょうか。
わかりずらいかも知れませんが
よろしくお願いしますm(__)m
0181デフォルトの名無しさん
2009/07/26(日) 17:25:08マルチとは
『他でも質問してる』
って意味なのですね。
すみませんm(__)m
ドコで質問すればベストか、また、
色んな人に聞けばもしかしたら、と思い書き込みしてしまいましたm(__)m
ご迷惑おかけしましたm(__)m
さしつかえ無ければ>>179さん、簡単にでも教えていただけませんでしょうか?
よろしくお願いしますm(__)m
0182デフォルトの名無しさん
2009/07/26(日) 17:29:37女子大生or女子高生なら、即解決w
0183デフォルトの名無しさん
2009/07/26(日) 17:53:50Excelで店舗の営業日報を作れるデータを作成しました。
他人がそのデータを使うワケなのですが、
都内の中学校にかよう15歳の女子中学中学生ですが、最近中学1年の妹の胸が大きくなってきて困ります。
まだ中学生なのに私よりも膨らみが目立っているのが少し悲しいです。
一緒にお風呂に入るとよくわかります。
妹は私の気持ちに気がつくどころか、ことあるごとにさわったりもんだりしてくるのです・・・。
データに打ち込んで、上書き保存などはできるが、
データそのものを複製やコピーする事を防止する事は可能ですか?
また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか?
あるとすればどのような手段でデータをその人に預ければよいのでしょうか。
今日もスポーツブラの下から手を入れてきて、声を堪えるのに大変でした。
わかりずらいかも知れませんが
よろしくお願いしますm(__)m
0184デフォルトの名無しさん
2009/07/26(日) 18:13:540185デフォルトの名無しさん
2009/07/26(日) 22:33:47初心者&初カキコです。
いきなりすみません。
配列変数 A(3,100)があるとして、
A(2,0)〜A(2,100)や、A(3,0)〜A(3,100)といった各一次元配列の平均をそれぞれ出したいのですが、
全ての平均を出す場合は
.Average(A)
ですが、各次元毎だと、方法が解りません。
どなたか指導をお願いします。
0186デフォルトの名無しさん
2009/07/26(日) 22:48:03・WindowsVista
・Excel2007
SheetAに貼った画像の中から選択したものを一つSheetBに貼りたいんですが
どうすればいいですか?
0187デフォルトの名無しさん
2009/07/26(日) 22:58:51マクロの自動記録は試してみましたか?
当方Excel2003ですが、自動記録してできたソースの1〜2行コメント化するだけで、できましたよ。
0188デフォルトの名無しさん
2009/07/26(日) 23:02:24凡人なので、for 〜 next ループで回しながら、合計と件数を調べてわり算で求める方法しか知りません。
これ以外の回答をお望み?
0189デフォルトの名無しさん
2009/07/26(日) 23:03:27ありがとうございます
やってみます
0190デフォルトの名無しさん
2009/07/26(日) 23:29:12出来るだけ早くしたくて。。
すみません。実は50×100×10000の三次元配列なので、それやると時間が半端ないんです。
0191188
2009/07/26(日) 23:34:11情報の後出しイクナイ
0192デフォルトの名無しさん
2009/07/26(日) 23:37:25でもだめでした・・
Sheet2にある複数の図のうち、異なる図をコピーしても、すべて
Sheets("Sheet2").Select
Selection.Copy
となってしまいます
コピーする図を選択するにはどのようにすればいいんですか?
0193デフォルトの名無しさん
2009/07/26(日) 23:39:54そんなの後出しじゃないだろ。
質問の内容から想定してしかるべき。
0194デフォルトの名無しさん
2009/07/26(日) 23:41:24たとえば変数iが「5 to 101 step 24」で変数kが「5 to 20 step 5」として
cells(i,k).copy
selection.paste
みたいな感じで動作させたいです。
0195デフォルトの名無しさん
2009/07/26(日) 23:47:02「俺にはわからない。」と言えばいいんだよ。
>情報の後出しイクナイ
なんだこりゃ?ぶさいく。
0196デフォルトの名無しさん
2009/07/26(日) 23:47:19確かに。後だしは良くないですよね。すみません。
出来るだけ簡単なシチュエーションにしたかったんです。
ところで、どなたか>185のやり方をご存知ないでしょうか?
0197187
2009/07/26(日) 23:59:08当方の手順(マクロの自動記録)シートAに図形があって選択していない状態から
1 図形をクリック
2 メニューの編集−コピー
3 シートBのタブをクリック
4 メニューの編集−貼り付け
これだけです。できたソースは↓で、1行目だけ削除すればいい。
ActiveSheet.Shapes("Picture 1").Select ←これだけ削除
Selection.Copy
Sheets("SheetB").Select
ActiveSheet.Paste
実行する際は、マクロを呼び出す前にコピーしたい図形をクリックして選択
状態にしておくこと。シートBの貼り付け先を指定したいときは、自動記録
のときに当該セルをクリックする。
0198デフォルトの名無しさん
2009/07/27(月) 00:04:47196ですが、世の中ギブアンドテイクって事で、試して見てください。
Worksheets("A").shapes(i).Copy
Worksheets("B").Activate
Active.Sheet.Paste
iの部分に画像が何枚目かを代入。
0199デフォルトの名無しさん
2009/07/27(月) 00:07:40>>実行する際は、マクロを呼び出す前にコピーしたい図形をクリックして選択
状態にしておくこと。
この作業無しでする方法はないですか?
0200デフォルトの名無しさん
2009/07/27(月) 00:22:25できました!
みなさんありがとうございました
0201デフォルトの名無しさん
2009/07/27(月) 01:24:29Range(Cells(1, 1), Cells(3, 100)) = a
として
各行の平均を出す
0202デフォルトの名無しさん
2009/07/27(月) 01:28:15k = 5
For i = 5 To 101 Step 24
If k > 20 Then Exit For
'↑はkのTo 20があまり重要でないならいらない
Cells(i,k).Copy
Selection.Paste
k = k + 5
Next
こんなんなったけどいいか?
これだと、変数iとkがいずれかはみ出したらループを抜ける。
これだと、(i,k)=(5,5),(29,10),(53,15),(77,20)の4回ループ内を実行する。
0203デフォルトの名無しさん
2009/07/27(月) 01:42:17ありがとうございます。
上記の方法で無事動作しました。
ちなみに変数にしたい要素が3つ以上ある場合というのは一般的にどういう処理が効率的でしょうか?
今はいちいちすべての場合分けをして記述していますが、それぞれの増減は規則性があるので
なんとか簡易にしたいと思っています。
0204デフォルトの名無しさん
2009/07/27(月) 01:53:41Sub test()
Debug.Print WorksheetFunction.Average(Range("A1:A100"))
Debug.Print WorksheetFunction.Average(Range("B1:B100"))
Debug.Print WorksheetFunction.Average(Range("C1:C100"))
End Sub
0205デフォルトの名無しさん
2009/07/27(月) 01:53:48ありがとうございます。
やはりシートを利用するしかないんでしょうね。
それか個別の一次元配列変数を宣言して代入とか。
出来れば、.Average(A(2))とかの記述でその従属二次元配列が計算されるのを期待したんですが、
特定の次元を宣言するような関数なり構文はないんですね。。
今日はもう寝ます。明日会社だし。
ありがとうございました。
0206デフォルトの名無しさん
2009/07/27(月) 10:20:03「一般的」と「効率的」と「簡易」は両立が難しい。
何がやりたいのか自分でもわかってない気配がするが、まずは質問を絞れ。
ループ終了の条件が2つ以上ある時は無理にFor Nextを使わない。
Exit ForやGotoのような、プログラムの流れを強制的に変える命令は、
あまり使わない方がいい。
i = 5
k = 5
While (i <= 101) And (k <= 20)
Cells(i, k) 以下略
i = i + 24
k = k + 5
Wend
0207デフォルトの名無しさん
2009/07/27(月) 10:44:58ForとIfでもWhileでも、終了条件の判定回数が増えるから少し効率が落ちるね。
そういう時は最初にループの回数を調べしまうといい。
回数i = (101 - 5) / 24
回数k = (20 - 5) / 5
If 回数i < 回数k Then
回数 = 回数i
Else
回数 = 回数k
End If
i = 5
k = 5
For a = 1 To 回数
Cells 以下省略
i = i + 24
k = k + 5
Next
あとはケースバイケース。
可能なら、こんなふうに数式を短縮してみるとか。
For a = 0 To 回数 - 1
Cells(5 + 24 * a, 5 + 5 * a) 以下省略
Next
0208デフォルトの名無しさん
2009/07/27(月) 17:17:40というCSVファイルがあって、これをDataという配列変数に
Data = Split(strTextLine, ",")
とすると
DATA[0]はA
DATA[1]はB
DATA[2]はC
DATA[3]はD
ですが
DATA[5]にナルが入るんでしょうか?
それとも最後のカンマは無視されるんでしょうか?
配列に入れて処理を加えた後に
strTextLine = Data(0)
For C = 1 To UBound(Data)
strTextLine = strTextLine & "," & Data(C)
Next C
で戻してやると最後のカンマは生きているので、無視はされてないのではないかと思うのですが、確証が得たいので質問しました。
0209デフォルトの名無しさん
2009/07/27(月) 17:33:58イミディエイなんとか
0210デフォルトの名無しさん
2009/07/27(月) 18:53:26さすがにDATA[5]には何も入らんだろう。という挙げ足は置いといて。
たとえば元のデータが"A,,,B"で長さが0の文字列が無視されてしまったらどうなると思う?
0211デフォルトの名無しさん
2009/07/27(月) 18:57:25LineInputを繰り返す度に毎回ReDimしながら代入するしかありませんか?
なんとなくRedimを繰り返すのは処理速度的にあまりスマートではないのではという懸念があるのですが。
一度LineInputの度に変数に+1して行数を求めてから
もう一度LineInputと代入を繰り返すのとどっちが良いでしょうか。
0212デフォルトの名無しさん
2009/07/27(月) 19:25:27スマートとかどうとか言う以前に目的を達成できたら、それで良いのでは?
デバッグの容易さとか保守性の容易さとかを考慮するのは大事だと思うけど。
0213デフォルトの名無しさん
2009/07/27(月) 21:51:33イミディエイトウインドウのことですな。
DATA[4]なら
Debug.Print DATA(4)
で調べられますYo.
っていうかこの場合ローカル ウィンドウで直接見たほうが早くね?
0214デフォルトの名無しさん
2009/07/27(月) 23:35:501行ずつ増やすんじゃなくて、たとえば100行とか200行単位で拡張していって、
最後に余った分はもう一度ReDimして削るようにすれば、だいぶ軽くなる。
行の長さの最大値とかファイルの大きさがある程度わかってれば、
もうちょっと別のアプローチもあるんだけど。
0215デフォルトの名無しさん
2009/07/27(月) 23:44:05ファイル全体を文字列変数に一気に読み込んだあと
Split関数で区切りを改行コードにして分割
0216デフォルトの名無しさん
2009/07/28(火) 00:35:54型番や製品名の一覧があり、これらが別に用意されている製品の型番などの書かれたリストと
一字一句相違ない事を確認する作業を補助するマクロを作ろうとしています。
列Aに
aaa
bba
ccc
zzz
とあり、別のシートにリストがあって
aaa
bbb
ccc
ddd
の様に書かれていたら、列Aのbbaとzzzがリストにないのでそのセルを着色する、と言う処理を考えています。
この様なリスト総当たり的な判定、間違い探しを行う事は可能でしょうか。
ttp://paint.s13.dxbeat.com/up/src/paint_18511.jpg
画像は処理前後のイメージです。列Cにコピーするわけではありません。
実際にはリストもデータもそれなりの量があります。
(なお、ループ処理、次の行、列、リストへの移動などは別に変数を切ってある範囲を直指定するなど力業でやってしまう予定です。)
マッチングのやり方として、以下を考えています。
1.リストの先頭の文字列をデータの列Aの先頭から総なめして、次のリストの文字列へ、、の繰り返し。
2.何かしらの関数でリストを一括で読み込めて、データの列Aを上からマッチングしてくれるやり方。
2は希望ですが、何か良い手段がありましたらご教授お願いします。
0217デフォルトの名無しさん
2009/07/28(火) 00:42:410218デフォルトの名無しさん
2009/07/28(火) 00:46:43そういう関数があるかは解りませんが、結局マッチングしなかったセルを色付けしないといけないので、
For〜Next構文を使用する事になると思いますので、1.をお勧めします。
0219デフォルトの名無しさん
2009/07/28(火) 00:53:48作業列を1列使えばワークシート関数だけでできるんだけど、VBA使わないとだめ?
0220デフォルトの名無しさん
2009/07/28(火) 00:54:27俺ならマクロでするけど。
0221デフォルトの名無しさん
2009/07/28(火) 00:58:52個人的お勧めは3.フィルタオプション
だけれどちょっと調べてよくわからないなら1.総ナメが堅いかな
結構な量あるとはいっても2003の行に入る分量なら
よほど下手なコード書かない限りたいして時間かからない
0222216
2009/07/28(火) 01:13:53>>217
調べてみました。まさにマッチングはこれだ!と言う感じでしたが、リストの別の値を代入するのではなく
色を付けたいのでどうして良いものか… あ、何でも良いから値をマッチしたら変数に値を一旦格納して
その後if文で変数を見て色塗りを振り分ける、、って感じなら出来そうですね。
>>218
はい、1も考えてみます。パフォーマンスがやや心配ですが^^;
ループはいずれかの方法を使いますが、時間の関係と空のセルも多々あり得るので手を抜こうと画策中です。
>>219
実は既にデータシートに数式が入っていたりして、なるべく体裁をいじりたくないというのが一点と
列が20個ほど、列の数だけリストも存在し、行数は100〜200位なのでVBAの方が良いのかなと考えました。
>>220
はい、vlookupをちょっと調べてみます。
条件付き書式は多分勝手に組んじゃダメと言われそうなので回避する方向で考えています。
>>221
なるほど、オートフィルタの制限無しバージョンみたいな感じですね。しかもリストの範囲も指定できて出力も出来ると。
参考にさせていただきます。ただ、各ファイルで毎回設定各列を指定する必要がありそうですね。
上記データシートが一日に10〜20ファイル届いて捌かないと行けないので、もう少し自動化の道も探ってみます。
0223デフォルトの名無しさん
2009/07/28(火) 01:37:25218です。20*200なら配列変数に格納してMatchなりVlookUpなりで検索かける方がセルに情報を読みに行く時間が短縮出来ますよ。ほんと僅かですけど。
変数格納もRangeオブジェクト使えば一瞬ですし。
0224デフォルトの名無しさん
2009/07/28(火) 01:42:13はあ?って思われたでしょうね。
誤爆しました。223は忘れて下さい。時間は同じでした。
0225デフォルトの名無しさん
2009/07/28(火) 07:35:381.セルに複数行のデータがある場合、指定行だけ参照することはできますか?
2.セルに入力されたパスが読み取り専用のフォルダかどうか調べることはできますか?
よろしくお願いします。
0226デフォルトの名無しさん
2009/07/28(火) 07:49:411については、セルの折り返しでなく改行入力ならば、改行をカウントして文字列抜き出す
2はFSO使えばおk
0227デフォルトの名無しさん
2009/07/28(火) 10:02:18Private Sub Worksheet_SelectionChange(ByVal Target As Range)
で渡されるTargetが連続した複数のセル範囲である場合、行を1行に
変更する処理を行いたいのですが、とりあえず力技で以下のように
しています。
myRange1 = Target.Address
myRange2 = myRange1
If InStr(myRange1, ":") Then
myRange = Split(myRange1, "$")
myRange2 = myRange(1) & myRange(2) & myRange(3) & Left(myRange(2), Len(myRange(2)) - 1)
End If
要は"$"で列行列行に分割して文字列を作り直しているのですが、
何とも見難いのでもっとスマートなコマンドやテクニックは無いでしょうか?
よろしくお願いします。
0228デフォルトの名無しさん
2009/07/28(火) 10:36:53ありがとうございます!
すばらしくスマートです。
0229デフォルトの名無しさん
2009/07/28(火) 12:20:58とりあえず$記号をまとめて消したいなら
myRange2 = Replace(Target.Address, "$", "")
あと、そのプログラムにはバグがあるよ。
選択された領域が2つ以上に分かれて離れていた場合、2つ目以降がすべて消えたり
$記号が残ったりする。
それよりも、セルが1個の時と複数の時を区別する意味がわかんないし、
$を消す理由もよくわからん。普通はTargetはそのまま使うもんだし。
たぶん、他の部分でもカンチガイしてる可能性が高い。
何がやりたいのか全部書いてみ?
0230227
2009/07/28(火) 13:27:12よく読んでください。
$をまとめて消したい訳ではありません。
連続領域の最上位行が対象ですので離れていようがバグりません。
>何がやりたいのか全部書いてみ?
>227の通りです。
0231デフォルトの名無しさん
2009/07/28(火) 13:35:49データ解析の色分けで同じようなことをやったことがありますが
$を探して無理やりやった記憶があります。
今でも勉強中の身ですのでその程度の知識しかありません。
SPLITで配列に入れて結合し直すのは感心しました。
無駄レス失礼。
0232デフォルトの名無しさん
2009/07/28(火) 13:59:52よく読めば>>227さんの言ってることくらいわかるはずだろ!
二度と質問者様の手を煩わせることのないようにな!
あと分かりやすく説明するんだぞ!!
(・д・)
0233デフォルトの名無しさん
2009/07/28(火) 14:09:26「行を1行に変更する」の意味がどうもわからん
じゃあ変更する前の「1行じゃなかった行」ってどういう状態のことだろ
023422
2009/07/28(火) 14:27:27set header = target.rows(1)
0235デフォルトの名無しさん
2009/07/28(火) 14:28:120236デフォルトの名無しさん
2009/07/28(火) 15:42:54奇遇だな、俺もわからないんだ
0237デフォルトの名無しさん
2009/07/28(火) 15:56:240238デフォルトの名無しさん
2009/07/28(火) 16:14:20具体的な例を出してないのが悪いな
例えば$A$3:$E$6が選択されてたらどうしたいんだ?
0239デフォルトの名無しさん
2009/07/28(火) 16:32:41そうだな、なんで解らないってレスが付いてるかも理解出来ないやつは書き込み禁止にすべきなんだよな
0240デフォルトの名無しさん
2009/07/28(火) 17:04:07そのプログラム、Target.Addressが"$A$1,$C$3:$D$4"の時、
myRange2は"A1,C1"という結果になるんだけど、本当にこれでいいの?
0241デフォルトの名無しさん
2009/07/28(火) 17:13:211行にしたいってこういうこと?
Set myRange2 = Target.Resize(1)
0242デフォルトの名無しさん
2009/07/28(火) 17:28:21myRange2 = Replace(Target.Resize(1).Address, "$", "")
じゃないか?
$を消す必要があるかどうかは不明だが
ちゃんと説明してもらえそうにないんで、とりあえず。
0243デフォルトの名無しさん
2009/07/28(火) 17:30:30たぶん>>241で正解だと思
0244227
2009/07/28(火) 17:31:34>236
>238
現状のコードまで書いてるのに・・・
>240
そのケースは想定しておりませんでした。
ご指摘ありがとうございます。
変な流れになってますので出直します。
失礼しました。
0245227
2009/07/28(火) 17:36:06それです。
Resizeがありましたね。
ありがとうございました。
0246デフォルトの名無しさん
2009/07/28(火) 17:53:30そのコードが理解不能な結果を出してんだから答えようがないじゃん
ちなみにCtrl+クリックで離れたセル領域を選択すると
Resizeでエラー出るよ
0247227
2009/07/28(火) 17:58:01>233,236,238の問いには充分かと思いますが?
またResizeでエラーがでるのは承知しております。
>229でとんちんかんなレスをされていた方でしょうか?
いずれにせよ不毛ですのでこの辺で失礼します。
0248デフォルトの名無しさん
2009/07/28(火) 18:42:48ほんと変な流れになってるよね、なんでかわからないけどkkwr
ちゃんとした質問kkwrだったし、口調も丁寧kkwrなのに・・・
多分タイミングが悪かったんじゃないかな・・・また何かあったらその時はきちんとしたレスが付くといいねkkbk
0250デフォルトの名無しさん
2009/07/28(火) 21:14:36こちらのコードを実行すると(0 2)、(0.1 1.9)...(1.8 0.2)、(1.9 0.1)と出力されます。
最後に出力させると思われる(2 0)が出力されません。
小数処理の関係かと思うのですが、どなたか詳しい方
解説いただきたくよろしくお願いいたします。
Sub test()
Dim a As Double
Dim b As Double
For a = 0 To 2 Step 0.1
b = Round(2 - a, 1)
Debug.Print a & vbTab & b
Next
End Sub
0251デフォルトの名無しさん
2009/07/28(火) 21:48:48演算誤差詳しくないけれど
Excelの0.1は厳密な0.1じゃないからループ21回目でfor文の終了条件の2を越えてるんじゃね?
0252デフォルトの名無しさん
2009/07/28(火) 21:52:15浮動小数点の問題ね
As Double を As Currency にしてみたら・・どうなるかな!
0253デフォルトの名無しさん
2009/07/28(火) 22:11:06For a = 0 To 2 Step 0.1
b = 2 - a
Debug.Print a, b
Next
でやってみ。誤差が見えるよ。
あとPrintメソッドで「 , 」を使うとTabの働きをする。これ豆知識な
0254デフォルトの名無しさん
2009/07/28(火) 22:20:08通貨型 (Currency) の変数は、64 ビット (8 バイト) の変数です。
整数形式で表され、10,000 倍されて整数として記憶された、15 桁の整数部分と 4 桁の小数部分を持つ固定小数点数です。
-922,337,203,685,477.5808 〜 922,337,203,685,477.5807 の範囲の値をとります。通貨型の型宣言文字は、アット マーク (@) です。
通貨型 (Currency) は、金額に関連する計算に役立つデータ型です。また、固定小数点を含む計算にも役立ちます。
0255250
2009/07/28(火) 23:14:54試してみて0.1ステップだと誤差で21回目に2より
少しだけ大きな値になってしまうことが理解できました。
Printメソッドでの「 , 」も勉強になりました。
通貨型でも期待通りの動作をすることを確認できました。
こういった誤差に強い型だとわかりました。
ご回答ありがとうございました。
0256デフォルトの名無しさん
2009/07/29(水) 00:14:45For a = 0 To 20 Step 1
b = ( 20 - a ) / 10
0257デフォルトの名無しさん
2009/07/29(水) 00:21:19豆知識ではなく基礎知識じゃね?
;で区切ると結合になって、末尾に;入れると改行されないのとセットで
0258デフォルトの名無しさん
2009/07/29(水) 10:09:22Dim A() As String
Dim B() As Long
Redim A(10)
Redim B(10)
と宣言して別のルーチンで配列の中身をいじりたい時
ルーチンの呼び出しと呼び出し側の指定はどう書いたら良いですか?
配列操作 A(), B()
private sub 配列操作(ByRef A() As String, ByRef B() As Long)
な感じでしょうか、それとも
配列操作 A, B
private sub 配列操作(ByRef A As String, ByRef B As Long)
な感じでしょうか
0259デフォルトの名無しさん
2009/07/29(水) 11:05:06配列は自動的にByRefになるので省略できます。逆にByValは指定できません。
Call 配列操作(A(), B())
Private Sub 配列操作(A() As String, B() As Long)
0260デフォルトの名無しさん
2009/07/29(水) 11:23:330261デフォルトの名無しさん
2009/07/29(水) 11:50:09おい、嘘つくな。
0262デフォルトの名無しさん
2009/07/29(水) 11:53:36Split関数で文字列をAというVariant型の配列に格納した場合、この変数は
配列操作 A
Private Sub 配列操作(A As Variant)
とすれば配列を維持したままByRefで渡せるんでしょうか?
0263デフォルトの名無しさん
2009/07/29(水) 12:12:180264デフォルトの名無しさん
2009/07/29(水) 13:37:55なんだろ
どちらも真理だ
0265デフォルトの名無しさん
2009/07/29(水) 14:31:15宿題?
0266デフォルトの名無しさん
2009/07/29(水) 14:37:35ただの疑問なら聞けば済むだろうが
ここで出る質問のほとんどは最終的に組まないと終わらないだろ?
まぁ実験の仕方がわからないって場合は仕方ないかも知れんが
0267デフォルトの名無しさん
2009/07/29(水) 15:44:290268デフォルトの名無しさん
2009/07/29(水) 15:55:18理解が深まって応用がきくようになる
0269デフォルトの名無しさん
2009/07/29(水) 16:59:34だが結果しか望まない者もいるのだよ・・・
0270デフォルトの名無しさん
2009/07/29(水) 17:18:10Dim V() As Variant
ReDim V(10)
V(0) = "自分で調べろ"
VVV V
End Sub
Private Sub VVV(V As Variant)
MsgBox V(0)
End Sub
0271デフォルトの名無しさん
2009/07/29(水) 17:57:12そのコードは冗長的だな
今後の保守のためにもこうすべき
Sub test()
略
V(0) = "ググレ"
略
0272デフォルトの名無しさん
2009/07/29(水) 18:04:34そのコードは冗長的だな
今後の保守のためにもこうすべき
ググレ
0273デフォルトの名無しさん
2009/07/29(水) 18:37:560274デフォルトの名無しさん
2009/07/29(水) 18:43:57Sub b()
Dim myStr As String
Dim myMsg As String
Dim i As Long
Do
myStr = Mid(Rnd(), 3, 14)
If myStr = "718571858269" Then Exit Do
sleep 1
Loop
For i = 1 To 12 Step 2
myMsg = myMsg + Chr(Mid(myStr, i, i + 1))
Next
Debug.Print myMsg
End Sub
>273
そもそも質問するスレだしな
答えたくないなら答えなければいいだけ・・・でもある
0275デフォルトの名無しさん
2009/07/29(水) 18:55:03素直に
for ri = 0 to 5
Randomize
rndStr(i) = mid(rnd()3,2)
next
0276デフォルトの名無しさん
2009/07/29(水) 19:55:37countif(range,"<100")
のように、第2引数が文字列型(?)のように見えます。
試しに、
dim str as string
str = "<100"
msgbox 10 & str '← 10<100 と計算をさせたい。= true の結果を出したい。
と組んだのですが、
結果は 10<100 と文字列で表現されるだけでした。
引数に含まれる演算子をそのまま読み込ませる方法はありますでしょうか。
なにとぞよろしくお願いします。
0277デフォルトの名無しさん
2009/07/29(水) 20:20:410278デフォルトの名無しさん
2009/07/29(水) 20:48:18MsgBox CBool(Val(10 & str))
0279デフォルトの名無しさん
2009/07/29(水) 20:52:220280デフォルトの名無しさん
2009/07/29(水) 20:52:34検索条件を2つ指定する場合はどのようにしたらいいのでしょうか?
A列にある「あ」という文字とB列にある「い」という文字があるときの
C列にある数値の合計。
よろしくお願いします。
0281デフォルトの名無しさん
2009/07/29(水) 21:00:45ここはvbaの質問スレだけどvbaの回答でいいのか?
(なんとなくスレ違いっぽい文章に見えたので念のため確認)
0282デフォルトの名無しさん
2009/07/29(水) 22:51:02いや、ワークシート関数をVBAで使うって話ではなくて、
例えば、countif だと条件2個はネストしないと出来ないので、
それを1つの関数で出来るようにユーザー定義関数を作ろうと思ったのです。
その時に、ワークシートの countif は、第2引数に文字列で条件を入れてるのに、
それをダイレクトに演算式に代入出来てる事を疑問に思いまして。
0283デフォルトの名無しさん
2009/07/29(水) 22:59:550284デフォルトの名無しさん
2009/07/29(水) 23:00:540285デフォルトの名無しさん
2009/07/30(木) 05:32:07>282
Rangeオブジェクトのように、セル範囲を" "で囲んであるものも有りますよね。
これはVBAがコードをコンパイルする時に、区別しやすくするためだと思います。
なので必ず文字列として機能している訳ではないです。
最終的にはマシン語で動く訳ですから。
0286デフォルトの名無しさん
2009/07/30(木) 06:24:270287デフォルトの名無しさん
2009/07/30(木) 07:35:200288デフォルトの名無しさん
2009/07/30(木) 07:41:11コンパイルの意味わかってる?
0289デフォルトの名無しさん
2009/07/30(木) 07:42:520290デフォルトの名無しさん
2009/07/30(木) 07:51:58それでVBAは機械語に訳した実行ファイルを作るのかい?
0291デフォルトの名無しさん
2009/07/30(木) 07:53:310292デフォルトの名無しさん
2009/07/30(木) 09:02:190293デフォルトの名無しさん
2009/07/30(木) 10:04:310294デフォルトの名無しさん
2009/07/30(木) 10:31:03「Pコードマシン」でぐぐれ。
0295デフォルトの名無しさん
2009/07/30(木) 13:08:270296デフォルトの名無しさん
2009/07/30(木) 13:10:25Rangeならいけるわ
0297デフォルトの名無しさん
2009/07/30(木) 19:10:58OS:Vista、Excel:2007
コンパイルを実行すると
”プロシージャの呼び出し、または引数が不正です”と表記されます。
この際、黄色い帯で示されるエラー部分が、
Public Function Zn(CZn, X, W, b, K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11)
Zn = 2 * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4) / _
(K1 * X + ((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _
- K8 * W * X - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4)) ^ 0.5)
End Function
のZnの式の部分です。
色々考えたのですが原因がわからず、試しに、上手くいく類似のプログラムの
Znを代入してみたところ、エラーは出ませんでした。
代用したZnの式は
Zn = 2 * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2) / _
(K1 * X + ((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _
- K8 * W * X - K9 * X * W ^ 2)) ^ 0.5)
です。
(K10とK12の項を削除したものです)
最初のZn式がエラーを示す原因等、ご助言お願いいたします。
0298デフォルトの名無しさん
2009/07/30(木) 19:48:590299デフォルトの名無しさん
2009/07/30(木) 20:09:560300デフォルトの名無しさん
2009/07/30(木) 20:15:46>>299
早速のご助言ありがとうございます。
0.5とは、最後のですよね。
ただ、エラーが出るZn式にも、出ないZn式にも含まれているのですが・・・?
0301デフォルトの名無しさん
2009/07/30(木) 20:28:092kしかもっていないけど、基本的に^は整数しか出来ない
Zn = Application.Power(〜〜 ,0.5)
で代用
0302デフォルトの名無しさん
2009/07/30(木) 20:38:13細かいけど前に「2 *」が抜けてないか?
0303302
2009/07/30(木) 20:40:41さすがにそこまで応用力のないやつはいないか
0304297
2009/07/30(木) 20:46:40ありがとうございます!
恥ずかしながら、301さんのスレを見て初めてVBAでワークシート関数の利用が
出来ることを知りました。。。
ほしいというのは、やはりここに書いただけではエラーの理由の解明が
難しいということでしょうか?
0305デフォルトの名無しさん
2009/07/30(木) 21:08:480306297
2009/07/30(木) 21:46:24最初のZnの式を
Zn = 2 * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4) / _
(K1 * X + Application.WorksheetFunction.Power(((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _
- K8 * W * X - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4)), 0.5))
としたのですが、
「worksheetFunctionクラスのPowerプロパティを取得できません」
とのことです。。。
0307デフォルトの名無しさん
2009/07/30(木) 22:01:330308デフォルトの名無しさん
2009/07/30(木) 22:24:23Sub test()
Debug.Print 2 * Zn(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) ^ 0.5
End Sub
Public Function Zn(CZn, X, W, b, K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11)
Zn = (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 - K8 * X * W - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4) / _
(K1 * X + ((K1 * X) ^ 2 + 4 * K2 * X * (CZn - X - K3 * b * X - K4 * b ^ 2 * X - K5 * b ^ 3 * X - K6 * b ^ 4 * X - 2 * K7 * b * X ^ 2 _
- K8 * W * X - K9 * X * W ^ 2 - K10 * X * W ^ 3 - K11 * X * W ^ 4)))
End Function
0309デフォルトの名無しさん
2009/07/31(金) 00:02:27Excel.Range("Sheet1!$A$1").Find(What:="")
What:= ←ここに255文字以上入れると、動かんのだが。
0310デフォルトの名無しさん
2009/07/31(金) 00:36:05Dim HashedData
Set HashedData = CreateObject("CAPICOM.HashedData")
HashedData.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
HashedData.Hash "abc123あいう"
MsgBox HashedData.Value
End Sub
暗号化プログラムを作っているのですが、予定では
「f95439120bf5c5d2b962cbe3a530199226f1ed2e」
と出る予定だったはずなのに違う値が出て来るヽ(`Д´)ノ
0311デフォルトの名無しさん
2009/07/31(金) 01:21:08半角のみと全角のみで確認
0312デフォルトの名無しさん
2009/07/31(金) 07:04:59ここがヒットしました。普通のExcelとExcel VBAとの違いはなんですか?
エクセルとは、プログラムしたエクセルに同じ動作を繰り返させるものだとホームページで読みました。
0313デフォルトの名無しさん
2009/07/31(金) 07:24:10>普通のExcelとExcel VBAとの違い
比較する対象ではありません。
ExcelはExcel VBAを含みます。
しかし、例外もあり、含まないExcelもあります。
>エクセルとは、プログラムしたエクセルに同じ動作を繰り返させるもの
再帰的な定義ですね。
その「ホームページ」には「プログラムしたエクセル」の定義は書いてありましたか?
0314デフォルトの名無しさん
2009/07/31(金) 07:41:400315デフォルトの名無しさん
2009/07/31(金) 09:58:31Functionの最初に
Debug.Print CZn; X; W; b; K1; K2; K3; K4; K5; K6; K7; K8; K9; K10; K11
ってのを追加して、エラーが出た時のパラメータを教えて
0316デフォルトの名無しさん
2009/07/31(金) 12:36:30マイナスの平方根をとろうとしてる
実数解を期待してるなら、式かパラメータかどっちかがおかしい
0317デフォルトの名無しさん
2009/07/31(金) 14:06:05sheet1にある表のB列に「特定」があれば、その行をコピーして
sheet2の2行目から下へ順番に貼り付けたいのですが、
sheet2への貼り付けがうまくいきません。
Rend = Range("c65536").End(xlUp).Row
For i = 7 To Rend
If Range("b" & i) = "特定" Then
Worksheets("sheet1").Rows(i).Select
Selection.Rows.Copy
Worksheets("sheet2").Rows(i).PasteSpecial
End If
Next
Worksheets("sheet2").Rows(i).PasteSpecialの変数(i)を
Rend2=Range("a2").end(xldown).offset(1,0)を作って
それを当てはめてもうまくいきません。
解決方法を教えてください
0318デフォルトの名無しさん
2009/07/31(金) 14:46:12シート2のセルをカウントする変数を組み込めばいいんじゃね
0319317
2009/07/31(金) 15:19:14ありがとうございます。^^
おかげさまで解決しました。
0320デフォルトの名無しさん
2009/07/31(金) 16:17:050321デフォルトの名無しさん
2009/07/31(金) 20:03:47おそらく、sheet2をアクティブにしていないから
0322デフォルトの名無しさん
2009/08/01(土) 07:56:11一般的な関数(例えばsinなど)では
EXCELのセル上で 『 =sin( 』を入力すると
入力セルの近くに『 SIN(数値) 』というクイックヒントがでます。
しかしVBAでユーザー定義関数をつくり、
同様にセル上で作成した関数を入力してもクイックヒントが出てきません。
どのようにすれば自作の関数でもクイックヒントがでるようになるのでしょうか。
教えてください。
Excel2003、WindowsXPです。
0323デフォルトの名無しさん
2009/08/01(土) 08:50:04Functipnプロシージャを書いただけじゃ、関数と引数を定義しただけだ
とはいえ、Excelでユーザー定義関数のヒントを定義するのは面倒なので
「関数の引数」ダイアログを使う方法をオススメする
こちらは定義というか宣言した引数がそのまま出てくる
0324デフォルトの名無しさん
2009/08/01(土) 13:32:00Excel2000で作っています。
url = "http://・・・/a.html"
Workbooks.Open Filename:=url
という形で、社内のイントラネット上のhtmlファイルをブックとして開きたいのですが、
インターネットのファイルや、PC内のファイルは開けるのに
イントラネット上のファイルは開けません。
なにか、特別な認証が必要なのでしょうか?
0325デフォルトの名無しさん
2009/08/01(土) 18:02:08それだと開くわけないよね。
0326デフォルトの名無しさん
2009/08/01(土) 18:46:15いや端末アドレスがそうなってるなら問題ないだろ
0327デフォルトの名無しさん
2009/08/01(土) 19:07:400328324
2009/08/02(日) 00:05:27IEなどのブラウザでは開けます。
ちなみに、イントラネットのファイルのアドレスは
http://192.168.1.10/〜/〜.html
みたいにIPアドレスになってます。
0329デフォルトの名無しさん
2009/08/02(日) 22:32:07cells(x,y)=Empty
の違いってなんでしょうか?
0330デフォルトの名無しさん
2009/08/03(月) 03:28:45EmptyはVariant型で「変数が初期化されていない」という意味の特殊な値。
"" はString型で長さが0の文字列。ただしCellsに代入した場合は自動的にEmptyに変換されるので
結果は同じになる。
0331322
2009/08/03(月) 05:41:14ありがとうございます。
「関数の引数」ダイアログ理解しました。
しかしできることなら、やはりヒントを定義したいのですが
その場合はどのような方法でやればいいのでしょうか?
0332デフォルトの名無しさん
2009/08/03(月) 06:37:590333デフォルトの名無しさん
2009/08/03(月) 14:57:23通常の書式に変換(&削除)したいのですが、何か良い方法がありますでしょうか?
0334デフォルトの名無しさん
2009/08/03(月) 17:31:03新規のシートに
はりた
0335デフォルトの名無しさん
2009/08/03(月) 17:32:32貼りつけて保存すればいんじゃね
0336デフォルトの名無しさん
2009/08/03(月) 19:54:43Excel Office2007
ある文字列をカウントする関数Function()を作ってみたけど
参照しているセルの値が変わっても自動計算されません。
なぜでしょうか?
Excelの自動計算はONにしてます。
また、マクロも有効になっています。
数式バーにカーソルを合わせてEnterキーを押すと
そのセルだけが更新されます。
0337デフォルトの名無しさん
2009/08/03(月) 20:45:52それだけの情報だとなんともいえない。
0338デフォルトの名無しさん
2009/08/04(火) 00:23:59たくさんのシートがあるので、手作業でなく、コピーそのものをマクロ化する方法を教えて下さい。
0339デフォルトの名無しさん
2009/08/04(火) 00:43:47モジュールのインポート、エクスポート
0340デフォルトの名無しさん
2009/08/04(火) 06:17:42それだけの情報だとApplication.Volatile使えとしかいえない。
>>338
VB言語でVBプロジェクトを弄る方法は、表計算(Excel)とは関係ないので
>>339の方法がお気に召さないならそれ以上はスレ違いって話になる
しかし、あるブックの複数シートで同一イベントを起こしたい場合
シートモジュールでのWorksheet_Changeの変わりに
ブックモジュールでWorkbook_SheetChange使えば良いだけの話だがな
0341デフォルトの名無しさん
2009/08/04(火) 08:57:24VBEこそ、もろこのスレ向きの話題だろうが
0342デフォルトの名無しさん
2009/08/04(火) 09:03:08ハァ?
(゚Д゚)y─┛~~
0343デフォルトの名無しさん
2009/08/04(火) 09:56:25Application.VBE.を使用して挿入
好きなほうをどうぞ
0344デフォルトの名無しさん
2009/08/04(火) 13:47:39なんでCOUNTIFがあるのに自作するのか分らんが、関数の参照してるセルはきちんと引数に入れてるのか?
一部の揮発性関数をのぞいて、基本的に関数は引数が変化したときだけ自動では再計算する。
=COUNTIF(A1:A10,C1)ならA1:A10のいずれかのセル、またはC1が変更されたときだけだ。
だから自分で関数を作るときも範囲と検査値の二つの引数を入れるように作らないと駄目だ。
Application.Volatileで逃げるのは間違った解決策だから気をつけろ。
0345デフォルトの名無しさん
2009/08/04(火) 15:25:14どこを修正したらよいでしょうか。どなたご教授お願いします。
Sub GetWebPageTitle()
Dim objIE As Object
Dim lngLastRow As Long
Dim i As Long
Dim strURL As String
On Error GoTo ErrHandler
'IEのオブジェクトを作る
Set objIE = CreateObject("InternetExplorer.Application")
'最終行取得
lngLastRow = Me.Range("A65536").End(xlUp).Row
For i = 1 To lngLastRow
strURL = Me.Cells(i, "A").Value
objIE.Navigate strURL
'表示完了まで待つ
Do While objIE.Busy = True And objIE.ReadyState <> 4
DoEvents
Loop
Me.Cells(i, "B").Value = objIE.Document.Title
Next i
objIE.Quit
MsgBox "タイトル取得完了"
Finally:
0346デフォルトの名無しさん
2009/08/04(火) 15:25:55Set objIE = Nothing
Exit Sub
ErrHandler:
With Err
MsgBox .Number & vbCrLf & .Description, vbCritical
End With
Resume Finally
End Sub
0347デフォルトの名無しさん
2009/08/04(火) 15:46:44自己解決しました。
すみません。
0348338
2009/08/04(火) 19:41:57ありがとうございます。
インポートは、シートでなくmodule にくっついてしまいだめでした。
教えていただいた方法を順に試してみたいと思います。
excel のvbaしかやったこと無いので、イベントをしらべだしてから
VBEなどがあるのを最近知った初心者です。
0349デフォルトの名無しさん
2009/08/04(火) 19:55:33,.∩ `ヽ
〃∪'´ ̄`二二人\ ヽ
| ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ',
|ハ ,ニ、 ,. - 、 | | | l |
| ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、
| | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔
| ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。
l l /\ .. イV\川 |
,' l l ,イ `l ̄´ / /ヽl l
l | l ハ `メ、 〃 ヽヽ、__ノ
l ∨ └‐イ「ト--ァ'´ ハヽ__ノ
ヽ/ } l」」 / / }`ー
〈_n| 八 / / /ノ
〈二二人 c /\/ / , イ
/ /厂 /\__>< {_
0350336
2009/08/04(火) 20:03:33確認するように変更したら自動計算されました。
>>344
複数の検索値でクロス集計するようにしています。
確かに範囲と検索値を引数に入れるようにしたほうがいいですね。
ありがとうございます。
0351デフォルトの名無しさん
2009/08/05(水) 07:54:360352デフォルトの名無しさん
2009/08/05(水) 15:52:18そもそも使わないんだよな……無意味なことをした
0353デフォルトの名無しさん
2009/08/06(木) 08:26:34今、XPのExcel2003のVBAの勉強をして二日目です。(プログラム経験などは一切なし)
参考にしているのは下記アドレスのページで第6章の途中まで進めました。
http://excelvba.pc-users.net/
他にも勉強するのにいいサイトがありましたらご教示お願いできないでしょうか?
個人的には動的? なツールのような使い方(任意の桁や条件の数字だけを抽出のような感じです)や
共通作業のソフト化(今は仕事でExcelを使うことはないですが…)を出来るようになるのが理想です。
0354デフォルトの名無しさん
2009/08/06(木) 12:43:01しかし、サイト紹介もVBの話もスレ違いだから自分で探しな
VBA分野で具体的な質問が有ったらまたおいで
0355デフォルトの名無しさん
2009/08/06(木) 22:15:560356デフォルトの名無しさん
2009/08/06(木) 22:19:36Open "ABC" & Str(i) & ".txt"
とした方がいいのでは?
0357デフォルトの名無しさん
2009/08/06(木) 22:54:33何で最近のゆとりは本買わないんだ。
本買え本。
しょーもないサイトを探し回る時間の損失に比べたら、2,3冊の本代なんて安いもんだ。
0358デフォルトの名無しさん
2009/08/07(金) 00:42:24一部出来なくなってしまいました。
→と←の移動は効くんですが、↑と↓の移動を受け付けてくれません。
ScrollLockやロック外し忘れでは無いと思います。
あと、セルをクリックするとセルの周りに太枠が出るじゃないですか?
あれも時々出なくなりました。
この現象が起こるのは今の所1つのブックだけです。
調べてみたんですが、何が原因かさっぱりわかりません。
0359デフォルトの名無しさん
2009/08/07(金) 00:44:05原因分かる人いたら教えて下さい。
0360デフォルトの名無しさん
2009/08/07(金) 06:36:21>>354-355
もし仮に目的がVBでないと難しいことが分かっても、VBAで覚えたことは使えると思うので
とりあえずこのままVBAを学んでみようと思います。
>>357
確かにそうですね。
今日にでも書店でよさげな本を探してみます。
0361デフォルトの名無しさん
2009/08/08(土) 22:16:53俺は、よく分かるプログラミングVBA 基礎・関数・応用
(大村あつし)の奴を3冊買ったんだけど。
0362デフォルトの名無しさん
2009/08/08(土) 23:49:18シートにイベントマクロをセットする方法がわかりましたのでご参考までに。
みなさまありがとうございました。
セットするマクロ
'チャートシート cost に mouseupイベントをセットする例
Sub mouseup_set()
Dim i As Long
With ActiveWorkbook.VBProject
For i = 1 To .VBComponents.Count
If Mid(.VBComponents(i).Name, 1, 5) = "Graph" Then
If .VBComponents(i).Properties("Name") = "cost" Then
.VBComponents(i).CodeModule.AddFromFile "D:\vbadir\mouseup.bas"
Exit For
End If
End If
Next i
End With
End Sub
'mouseup.bas の内容
Private Sub Chart_MouseUp(ByVal Button As Long, _
ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim ElemID As Long, Arg1 As Long, Arg2 As Long
' ここにMouseUp時の処理記述
End Sub
以上
0363デフォルトの名無しさん
2009/08/08(土) 23:50:19忘れた、追記
windows XP, excel2007 です。
0364デフォルトの名無しさん
2009/08/09(日) 00:02:16私本管理のDB見たら、Excel関連だけで\30kは使ってた
OS関係やプログラム全般と合わせたら軽く\100kは超えてる
俺プログラマでも何でもない文系人間なのにww
0365デフォルトの名無しさん
2009/08/09(日) 00:27:30b=b+a
としてセルに代入すると
0.010.01となってしまいます
何がいけないんでしょうか
0366デフォルトの名無しさん
2009/08/09(日) 01:12:55a、bが文字列になってる
数値に変換を
0367デフォルトの名無しさん
2009/08/09(日) 08:18:40大村あつしの本は、知識0の人になら僅かな足しにはなるが
他と比べて有用といえる物では無いな
0368デフォルトの名無しさん
2009/08/09(日) 11:35:42わざわざsheet2をアクティベートしてまた戻す、という方法じゃないとだめ?
住所みたいにsheet2;cells(3,3)みたく指定できませんか?
0369デフォルトの名無しさん
2009/08/09(日) 11:46:330370デフォルトの名無しさん
2009/08/09(日) 11:46:50Function GetCell(WS As String, row As Long, col As Long) As Variant
GetCell = Worksheets(WS).Cells(row, col).Value
End Function
とかじゃだめなの?
0371デフォルトの名無しさん
2009/08/09(日) 11:52:52ふむふむ。自作関数使ったことないんですが、やってみます!
それから、論理記号の∃(存在)って、for-next文で代替するしかないんでしょうか?
たとえば、
If A1からA10の間に100以上の値があれば
Then
みたいに使いたいんですが
0372デフォルトの名無しさん
2009/08/09(日) 11:56:16パーフェクトマスターとかいうでかい本一冊買ったくらいかなぁ
ただ、本分厚すぎて面倒なんで、基本的にExcel内のヘルプに頼ってる。
0373デフォルトの名無しさん
2009/08/09(日) 12:34:08> 住所みたいにsheet2;cells(3,3)みたく指定できませんか?
sheet2.cells(3,3)ではあかんの?
>>371はforで代用が一般的だと思う
ワークシート関数のMAXとかで一発で済ませてもいいし
0374デフォルトの名無しさん
2009/08/09(日) 13:13:44でやったらエラーでした。
cellsで範囲指定するのはどうやるんでしょか?
0375デフォルトの名無しさん
2009/08/09(日) 13:16:11もういいだろ
0376デフォルトの名無しさん
2009/08/09(日) 13:19:20セル範囲の指定はRange
worksheetfunction.max(Range(Sheet2.Cells(s, 4),sheet2.Cells(s+e,4)))
0377デフォルトの名無しさん
2009/08/09(日) 13:20:50助かりました。
たぶん10分後にまた何か質問します。
0378デフォルトの名無しさん
2009/08/09(日) 13:23:270379デフォルトの名無しさん
2009/08/09(日) 13:30:36他に適当なスレもないしスレ違いすぎってこともないから
まあ夏休み中はこんな流れでもいいんでない?
なぜなに質問コーナーみたいなかんじで
0380デフォルトの名無しさん
2009/08/09(日) 13:34:30for x=0 to a
next x
とするとfor文が無視されるんですが、変数をtoの後に持ってくることはできないんでしょうか?
0381デフォルトの名無しさん
2009/08/09(日) 13:39:22できるよ
aに1以上の数がはいってれば無視されないはず
0382デフォルトの名無しさん
2009/08/09(日) 13:41:27for x=0 to a
msgbox x
next x
でやってみ?無視されてないから。
0383デフォルトの名無しさん
2009/08/09(日) 13:56:44for x=0 to a
sheet1.cells(2,2).value=w
next x
にしても無反応なのであった;;
別の場所に問題あるのかな。
0384デフォルトの名無しさん
2009/08/09(日) 13:57:350385デフォルトの名無しさん
2009/08/09(日) 14:03:390386デフォルトの名無しさん
2009/08/09(日) 14:06:250387デフォルトの名無しさん
2009/08/09(日) 14:07:07アホwそれを先に言え
0388デフォルトの名無しさん
2009/08/09(日) 14:13:33サブを呼び出すときに変数?に戻る数を入れてやればいいんじゃね・・・?
0389デフォルトの名無しさん
2009/08/09(日) 19:54:040390デフォルトの名無しさん
2009/08/09(日) 20:34:23そのレスを>>380の段階で付けられるようになれば神なんだろうなー
俺にはまだまだ無理だ
0391デフォルトの名無しさん
2009/08/09(日) 22:24:52シートで見たいなら
for x=0 to a
cells(x.1)=x
next
とか書かないとわからないぞ
0392デフォルトの名無しさん
2009/08/09(日) 23:50:59a<0
だからだと思う
例えばaがstring型だとか
0393デフォルトの名無しさん
2009/08/10(月) 00:46:24ということをやりたいのですが、
日本語全角文字を認識させるために、シフトイン、シフトアウト
というコードを全角文字の前後に付与する必要があるらしいのです。
このシフトイン、シフトアウトをVBAでファイルに書き出すことは
できるのでしょうか?
シフトイン、シフトアウトは、16進数で28H,29Hという記述は見つけたのですが
よくわかりません。
知ってる方いらっしゃいませんか? m−O−m
WindowsXP、EXCELは2003です。
0394デフォルトの名無しさん
2009/08/10(月) 00:52:210395デフォルトの名無しさん
2009/08/10(月) 02:25:590396デフォルトの名無しさん
2009/08/10(月) 06:42:150397デフォルトの名無しさん
2009/08/10(月) 07:26:32windowsのエディタで開くところから始めるだろjk
0398デフォルトの名無しさん
2009/08/10(月) 08:20:34どういう形式で出力すればいいのか質問者がわかってないと答えようがないわな
そもそも16進のままどっかに書いとけばいいものなら回答の必要もないだろうし
0399デフォルトの名無しさん
2009/08/10(月) 11:29:42ド素人は黙っとけ
0400デフォルトの名無しさん
2009/08/10(月) 11:38:200401デフォルトの名無しさん
2009/08/10(月) 15:00:07んで、「ebcdic vba」でググってみたら、こんなページがヒットしたわけだが。
ASCII 文字コードと EBCDIC 文字コードとの変換方法
http://support.microsoft.com/kb/216399/ja
0402デフォルトの名無しさん
2009/08/10(月) 16:13:030403デフォルトの名無しさん
2009/08/10(月) 16:29:22.Write "("
シフトアウト
.Write ")"
0404デフォルトの名無しさん
2009/08/10(月) 18:19:15残念、ハズレ
VBスレならスレ違いじゃないが
『"E x c e l" VBA』スレでは、残念ながらスレ違い(>>1参照)
0405デフォルトの名無しさん
2009/08/10(月) 18:53:10シートのA1から下に30個くらい名前が書いてあり、その名前ごとに新しいシートを追加したいです。
こういうのって簡単にできる人には簡単すぎると思うんですが、教えてもらえるとうれしいです。
0406デフォルトの名無しさん
2009/08/10(月) 21:03:09sub シート追加()
for a = 1 to 30
if cells(a,1) <> "" then sheets.add.name = cells(a,1)
next
end sub
0407デフォルトの名無しさん
2009/08/10(月) 21:32:35For Each cell In Range(Range("A1"), Range("A1").End(xlDown))
Worksheets.Add(, Worksheets(Worksheets.Count)).Name = cell.Value
Next cell
0408デフォルトの名無しさん
2009/08/10(月) 21:46:22Application.DisplayAlerts = False
For Each a In Sheets
a.Delete
Next
Application.Save
Application.DisplayAlerts = True
0409デフォルトの名無しさん
2009/08/10(月) 21:47:290410デフォルトの名無しさん
2009/08/10(月) 23:05:31For Each C In Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
Worksheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = C
Next C
0411デフォルトの名無しさん
2009/08/10(月) 23:20:12Sub aaa()
Application.DisplayAlerts = False
For a = 2 To Worksheets.Count
Sheets(a).Delete
Next
ActiveSheet.Cells.Clear
Application.Save
Application.DisplayAlerts = True
End Sub
0412デフォルトの名無しさん
2009/08/10(月) 23:43:20>試したらこれでいけた
試してないけどSheets(a).Deleteはダメぢゃネーノ?
0413デフォルトの名無しさん
2009/08/11(火) 01:42:100414デフォルトの名無しさん
2009/08/11(火) 06:36:51試してないけど、ここは大丈夫か?
Worksheets.Add after:=Sheets(Sheets.Count)
0415デフォルトの名無しさん
2009/08/11(火) 07:04:26オートシェイプに背景画像を挿入する場合についての質問です。
手動でやる場合、
・オートシェイプの書式設定
・塗りつぶし
・色
・塗りつぶし効果
・図
・図の選択
で、画像を挿入した際に、同ページに
□図の縦横比を固定する
□図形に合わせて塗りつぶしを回転する
というオプションがありますが、このオプションをVBAで変更する方法を教えてください。
マクロの記録をしても、変更が記録されずに困っています。
WindowsXP/Office2003
0416デフォルトの名無しさん
2009/08/11(火) 09:39:24試してないけどシートのインデックス番号って削除したら前詰めじゃね?
Sheets(1).Deleteなら分かる。
0417デフォルトの名無しさん
2009/08/11(火) 10:20:16試してみたら2000では動いた
2003では試してないけど
0418デフォルトの名無しさん
2009/08/11(火) 10:50:250419デフォルトの名無しさん
2009/08/11(火) 11:04:25お前は何と戦ってるんだ
0420デフォルトの名無しさん
2009/08/11(火) 13:15:24TCPIPの問題
ブラウザはデフォルトでアドレス変換したりするけどね
エクセルでやりたいなら
¥¥PC名¥フォルダ〜
とかにしたら
とりあえずググれば解決できる
0421デフォルトの名無しさん
2009/08/11(火) 13:17:45いきなりどうしたの?
0422デフォルトの名無しさん
2009/08/11(火) 13:44:49スレ違いなうえに、適当なことかましてんじゃねーぞ、ボケ
0423デフォルトの名無しさん
2009/08/11(火) 13:51:04Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Rotation = 0#
0424415
2009/08/11(火) 15:23:47>>423
> Selection.ShapeRange.LockAspectRatio = msoTrue
は、
・オートシェイプの書式設定
・サイズ
・倍率
・縦横比を固定する
のON/OFFですね。
> Selection.ShapeRange.Rotation = 0#
は
・オートシェイプの書式設定
・サイズ
・サイズと角度
・回転角度
の指定です。
どちらも目的の物とは全く違うようです。
0425デフォルトの名無しさん
2009/08/11(火) 16:22:39が理解不能なのは俺だけ?
回答なのにスレ違いってなんぞ
適当云々は知らんけど、丁度いいし説明してくれるのかな?
0426デフォルトの名無しさん
2009/08/11(火) 17:53:160427デフォルトの名無しさん
2009/08/11(火) 18:02:11適当かどうかも判断できないんだったら、黙っとけ
0428デフォルトの名無しさん
2009/08/11(火) 18:30:47http://ebi.dyndns.biz/windowsadmin/2009/03/11/%E3%80%8C%E3%82%A4%E3%83%B3%E3%83%88%E3%83%A9%E3%83%8D%E3%83%83%E3%83%88%E3%81%AB%E7%B9%8B%E3%81%8C%E3%82%89%E3%81%AA%E3%81%84%E3%80%8D-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%B5%E3%83%95/
おい関係ないなら誘導しろよ
かいとう者に噛み付くなkzg
あと説明もできないなら黙ってろ
さっさと市ね
ん
0429423
2009/08/11(火) 19:28:20・図の選択
で、画像を挿入した際に、同ページに
□図の縦横比を固定する
□図形に合わせて塗りつぶしを回転する
Excel97だとそういうオプションないんだよな
0430デフォルトの名無しさん
2009/08/11(火) 21:14:340431デフォルトの名無しさん
2009/08/11(火) 22:46:30ヘルプ参照または本屋にスパテク○○系を立ち読みしてくるべし。
0432デフォルトの名無しさん
2009/08/12(水) 10:40:26rangeやcellsは、オブジェクトになったりプロパティになったりとするのでしょうか。
私の認識では、rangeはオブジェクト、cellsはプロパティですが、
いろいろなコードを見ると オブジェクトとなったりプロパティになったりしているので
ケースバイケースで使えるのかなと思ったのですが、これで合ってるのでしょうか。
0433デフォルトの名無しさん
2009/08/12(水) 11:00:350434432
2009/08/12(水) 11:13:26プロパティ=属性
0435432
2009/08/12(水) 11:16:34オブジェクト=構成要素
0436デフォルトの名無しさん
2009/08/12(水) 11:37:44>私の認識では、rangeはオブジェクト、cellsはプロパティですが、
その認識が間違い。
Rangeに変数が使えないとかCellsでは1セルor全セルしか指定できない
などの制約によって使い分けてるだけ。
0437デフォルトの名無しさん
2009/08/12(水) 11:47:33その説明もおかしいだろw
0438432
2009/08/12(水) 12:17:09勉強しはじめたばかりで。
0439デフォルトの名無しさん
2009/08/12(水) 12:35:00Range("A" & i).Valueとかよく使うよ
手元のVBA辞典だと
Rangeはオブジェクトとプロパティ
Cellsはプロパティ
実例でいうと
Range("B2").Cells(2, 2).Activate
Range("B3").Range("B2").Activate
と書けるが
Cells(3, 2).Range("B2").Activate
とは書けない
0440デフォルトの名無しさん
2009/08/12(水) 12:39:43は
オブジェクト.プロパティ.メソッド
0441432
2009/08/12(水) 12:47:08ありがとうございます!
VBA辞典買います。
ずうずうしくもうひとつ質問です。
Worksheets("sheet1").Cells(i,5).Value
この場合
コレクション.プロパティ.プロパティ でしょうか。
0442デフォルトの名無しさん
2009/08/12(水) 13:27:020443デフォルトの名無しさん
2009/08/12(水) 13:27:52Worksheets("sheet1")はオブジェクト
Worksheetsはコレクション
実例
Worksheets.Count
Worksheetsコレクションに含まれるWorksheetsオブジェクトの数
0444デフォルトの名無しさん
2009/08/12(水) 13:29:18rangeプロパティもcellsプロパティもrangeオブジェクトを取得できる。
rangeのcountプロパティはlongを返す。
>Cells(3, 2).Range("B2").Activate
書ける。
コレクションもオブジェクトだコラ。
0445デフォルトの名無しさん
2009/08/12(水) 13:43:14>444
Cells(3, 2).Range("B2").Activateって書けたね、スマソ
>コレクションもオブジェクトだコラ
それはそうだが、
コレクションはCountできるが、オブジェクトはCountできないし
オブジェクトにNameはあるが、コレクションにNameはない
0446デフォルトの名無しさん
2009/08/12(水) 13:46:21/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0447デフォルトの名無しさん
2009/08/12(水) 14:13:24お前もう何も書くな
0448432
2009/08/12(水) 14:18:12勉強になりました。
ありがとうございます。
0449デフォルトの名無しさん
2009/08/12(水) 16:52:27マジなのかジョークなのか、判断に苦しむ。
0450デフォルトの名無しさん
2009/08/12(水) 17:49:21LineInputでファイルを一行づつ読み込みたいのですが
読み込みたいファイルがUNIXのファイルなんで改行がLFとなり一行と認識してくれません。
一行ごとに読みたいのですが何かいい方法ありますか?
0451デフォルトの名無しさん
2009/08/12(水) 18:06:22変数に読み込んでからvblfで分割がいいのでは?>>215あたりを参照
0452デフォルトの名無しさん
2009/08/12(水) 20:54:40Sheet1のようなオブジェクト名で呼ぶのと、
Sheets("名前")で呼ぶのとでは、
動作が異なる場合がある?なぜ?
Sheet1(名前は"テスト"):
Sub test(X As TestType)
MsgBox X.a
End Sub
標準モジュール:
Type TestType
a As String
End Type
Sub test()
Dim X As TestType
X.a = "ほげ"
Call Sheet1.test(X) '動く
Call Sheets("テスト").test(X) '動かない
End Sub
なるべくシート名を使いたいのだが…
0453デフォルトの名無しさん
2009/08/12(水) 21:56:02詳しい人が来るまでの繋ぎに気付いた点をレスすると
シート名と言ってもオブジェクト名としてのシート名と表示上のシート名は多分別物で
VBEで「sheet1(うんじゃらげ)」の前半が多分オブジェクトとしてのシート名。
プロパティーウィンドウから変更できた気がするようなしないような。
質問のケースへの対応なら
表示上のシート名からインデックス番号を取得してそれを使うのが早いかな?Byなんちゃって回答者
0454デフォルトの名無しさん
2009/08/12(水) 22:09:47Sheet1と書いたのはオブジェクト名としてのシート名、
Sheets("テスト")は表示上のシート名です。
オブジェクト名もプロパティウィンドウから変更できるのを
いま知ったので、今後はオブジェクト名だけを使えば解決、だけど、
ここまで全部、表示上のシート名で書いてきたから変更がめんどいのと、
上記の動作が異なるメカニズム自体を知っておきたくなって。
0455デフォルトの名無しさん
2009/08/12(水) 22:52:170456デフォルトの名無しさん
2009/08/12(水) 23:10:330457デフォルトの名無しさん
2009/08/13(木) 00:05:490458デフォルトの名無しさん
2009/08/13(木) 00:09:02Sheet1は事前バインディング、Sheets("テスト")は実行時バインディング
0459デフォルトの名無しさん
2009/08/13(木) 00:21:06Excel2000(VB6.0)でも再現したからそれはない
0460デフォルトの名無しさん
2009/08/13(木) 00:41:12vb6.0にクラスの概念がないと思っている人?
0462452
2009/08/13(木) 00:57:14Excel VBAでのオブジェクト指向の理解が足りないので
十分には理解できてませんが、教えた頂いたキーワードでググったら、
何が問題なのかはちょっとわかりました。
シートの参照は、どちらでもいい場合は
事前バインディングになるSheet1のほうがメリット多そうなので、
以後なるべくこちらを使うことにします。
0463デフォルトの名無しさん
2009/08/13(木) 01:06:26>>455が暗黙のインスタンスのことを言っていると解釈した上でのレスだ
0464デフォルトの名無しさん
2009/08/13(木) 01:15:520465デフォルトの名無しさん
2009/08/13(木) 01:22:09ごめ。いみふだ。なしで。
0466デフォルトの名無しさん
2009/08/13(木) 12:37:06配列で質問させてください。
Dim myArray() As Variant
Dim r As Long
r = Range("C1").End(xlDown).Row
ReDim myArray(r)
myArray = Range("C1:C" & r)
MsgBox myArray(1) '←エラー発生
End Sub
Msgboxでエラーとなるのですが、原因はmyArrayが2次元
配列になっているのが原因でした。
ステップインで確認すると
myArray = Range("C1:C" & r)
の時にローカルウィンドウの型で確認すると2次元になってしまいます。
何故配列myArrayは2次元になってしまうのでしょうか?
よろしくお願いします。
0467デフォルトの名無しさん
2009/08/13(木) 12:38:19仕様
0469デフォルトの名無しさん
2009/08/13(木) 17:11:11例えば、変数Aに「りんご」を代入し、ワークシート全体から「変数A」で検索して「りんご」を探したいのですが・・・
0470デフォルトの名無しさん
2009/08/13(木) 18:58:46ダブルクオーテーション外して変数名にすれば良いのさ。
0471デフォルトの名無しさん
2009/08/13(木) 21:29:27ボタンでトグル動作、例えば書式の太字や斜体みたいのやりたいのですが、
マクロ内でボタンが押される度に画像を変えて、状態を記録してってやらんとダメでしょうか?
プロパティとかでトグルボタンが設定できて状態が読めたりするとうれしいのですが
0472デフォルトの名無しさん
2009/08/13(木) 23:00:29プログラムを作りたいんですが、簡単に作れますかね??
VBAはほとんど素人で、今勉強を始めたばかりです。。
とりあえずコレは明日までに仕上げたいんですが、
0473デフォルトの名無しさん
2009/08/13(木) 23:15:19割と簡単だけどズブの素人が明日までに仕上げるのは無理かも
0474デフォルトの名無しさん
2009/08/13(木) 23:26:24アキラメロン♪
0475デフォルトの名無しさん
2009/08/13(木) 23:58:36Sub test()
Dim lst As New Collection
lst.Add (InputBox("1:"))
lst.Add (InputBox("2:"))
lst.Add (InputBox("3:"))
lst.Add (InputBox("4:"))
lst.Add (InputBox("5:"))
For Each v In lst
'ここでソートしてね
Debug.Print v
Next
End Sub
0476デフォルトの名無しさん
2009/08/14(金) 00:13:30作ってみたよ。
Option Explicit
Sub 整数を入力して大きい順に並べ替える()
Dim aaa As Integer
For aaa = 1 To 20
Cells(aaa, 1).Value = Application.InputBox(Prompt:="数値を入力してください", _
Title:="数値入力", _
Type:=1)
Next
Range("A1:A20").Sort _
Key1:=Range("A1") _
, Order1:=xlDescending _
, Header:=xlGuess _
, MatchCase:=False _
, Orientation:=xlTopToBottom _
End Sub
0478デフォルトの名無しさん
2009/08/14(金) 03:58:38本当助かりました!
0479415
2009/08/14(金) 09:58:19>>431
ヘルプは質問前に項目名で検索してみましたが、関係ない物ばかりで
目的の物は出てきません。
「スパテク○○系」というのが「ExcelVBAスパテク368」のことなら
読んできましたが載ってませんでした。
「スパテク○○系」というのがこれではなく、他に確実に載ってるものがあるなら
出来れば内容を教えて欲しいところですが、せめて正式な書籍名だけでも教えてください。
確実に載ってる書籍が無いなら、引き続きここで >>415 をお願いします。
0480デフォルトの名無しさん
2009/08/14(金) 12:02:35application.commandbars.コントロール
じゃいかんかね
0481デフォルトの名無しさん
2009/08/15(土) 00:23:05それをヒントに頑張ったらでけた
CommandBarButton.State にボタンのON−OFFがあった
ありがとう
0482デフォルトの名無しさん
2009/08/15(土) 12:43:39FileCopy D:\aaa.txt, "C:\aaa.txt"
これでD直下にあるaaa.txtファイルをC直下にコピーするという事ですが
これだとどうしてもaaa.txtというファイル名を指定しなければなりません
これを
FileCopy D:\aaa.txt, "C:\"
みたいにaaa.txtをC直下にそのままの名前でコピーさせたい場合ってどうすればいいのでしょうか?
0483デフォルトの名無しさん
2009/08/15(土) 13:38:13どんなシチュエーションかわからんけど
第一引数でファイル名を指定する必要がある以上ファイル名は既に分かっているはず
例えば
filename="aaa.txt"
FileCopy "D:\"&filename,"C:\"&filename
みたいなんだとダメなん?
あとはFileCopyじゃなくてFileSystemObject使うとか
0484デフォルトの名無しさん
2009/08/15(土) 14:48:42用途が分からんけど
Source = "D:\aaa.txt"
Destination = "C:\"
'Sourceからファイル名のみを取出す処理をここに記述
FileCopy Source, Destination & FileName
とすればいいんじゃない?
ファイル名のみを取出すのは、文字列関数なんかを使えば
できると思うけど......
んで 自分ならこうするってのを参考程度に
作ってみた(Dir関数を使用)
Dim Source, Destination, FileName
Source = "D:\aaa.txt"
Destination = "C:\"
FileName = Dir(Source)
If FileName <> "" Then
FileCopy Source, Destination & FileName
Else
MsgBox (Source & "が見つかりません")
End If
0485デフォルトの名無しさん
2009/08/15(土) 14:53:36次のコードが実行時エラー1004になります(2行目)。
c=5
Columns("3:" & c).Select
列選択の範囲を可変(実行時決定)にしたいのですが、
どうすればよいのでしょうか。
よろしくお願いします。
0486デフォルトの名無しさん
2009/08/15(土) 15:33:50なんかColumnsの使い方間違っているような
あんまし詳しくないんでなんとも言えないけど
Range使っちゃだめなケースなの?
0487485
2009/08/15(土) 16:10:43レスありがとうございます。
3列からc列まで選択できれば、何でも結構です。
ちなみにRangeだと、どうすれば良いのでしょうか?
0488デフォルトの名無しさん
2009/08/15(土) 16:13:43つマクロの記録
0489486
2009/08/15(土) 16:41:19このケースは、VBAを使う上での基本中の基本だとおもうので
調べてくださいとしかいえません。
>1 の★5 と★6 を熟読の事
0490487
2009/08/15(土) 17:07:16レスありかどうございます。
マクロの記録には、
Columns("3:5").Selectと出てきます。
c=5
Columns(〜c〜)とは出て来ません(変数を使ったコードは出てこない)。
どうすれば良いのでしょうか?
0491デフォルトの名無しさん
2009/08/15(土) 17:24:58>>(変数を使ったコードは出てこない)。
出てくるわけネーダロw
0492デフォルトの名無しさん
2009/08/15(土) 17:47:37dim c as string
c = "5"
でどうでしょう?
0493デフォルトの名無しさん
2009/08/15(土) 17:49:02ヒント
range ( , )
columns(3)
columns(c)
.select
0494デフォルトの名無しさん
2009/08/15(土) 18:06:48492ですができました。
勉強になりました。
ありがとうございます。
0495デフォルトの名無しさん
2009/08/15(土) 18:16:48Columns("C:E").Select
ってでてくるよ
>>492
"3:" & c
&は文字の結合だから
0496デフォルトの名無しさん
2009/08/15(土) 18:19:09Range("3:5").SelectとかRange("3:5").Selectならわかるが、Columns("3:5")は動かんなぁ。
記録マクロが動かんマクロになるわけないと思うが。
0497デフォルトの名無しさん
2009/08/15(土) 18:20:030498デフォルトの名無しさん
2009/08/15(土) 18:20:140499492
2009/08/15(土) 18:22:07僕のは間違えです。
0500486
2009/08/15(土) 19:17:25>>490 >>495 は同一人物だと仮定してレスします 別人だったらすみません。
>>490
>マクロの記録には、
>Columns("3:5").Selectと出てきます。
>>495
>マクロの記録をすると
>Columns("C:E").Select
>ってでてくるよ
なんかレス番によってマクロの記録結果が違っているのですが....
Columns("3:5").Select って本当に記録された?
0501デフォルトの名無しさん
2009/08/15(土) 20:07:430502デフォルトの名無しさん
2009/08/15(土) 21:34:46オブジェクトブラウザ
インテリジェンス
ウォッチ
ヘルプ、MSDN、Google
等々ありますが、これらの強み弱み、表示できない事、表示できる事を、
上手くまとめて頂けないでしょうか。
ウォッチでは実行時のプロパティーは表示されるけど、
何故か一部のプロパティーが表示されないし、
メソッドは当然の如く表示できません。
オブジェクトブラウザやインテリジェンスは、
実行時系プロパティーが当然取れません。
隠しオブジェクトについては、表示する様にすれば表示できますが。
ヘルプは実行時系も隠しもメソッドも全てあると思いますが、
検索性に難ありで、網羅性や信頼性に疑いを持ってしまう所アリ。
間違いがあったり、足りない所があれば教えて頂きたいです。
アーリーバインディングやレイトバインディングとか、
その辺りとの関わりも良く分かって無いです、
教えていただけると助かります。
0503デフォルトの名無しさん
2009/08/15(土) 22:32:480504デフォルトの名無しさん
2009/08/15(土) 22:34:06ググレカス
0505デフォルトの名無しさん
2009/08/15(土) 23:30:05一つ目
選択範囲のセルをオブジェクト変数に代入するにはどうすればよいでしょうか?
Dim aaa
aaa = Selection
としてもaaaにはvalueしか入らず、文字列の配列になってしまいます。
二つ目
選択範囲の全てのセルに対し、
長さが5じゃなければそのセルに文字列""を代入するというコードを書いてみましたが
aaa = ""
の行で「実行時エラー'10'
この配列は固定されているか、または一時的にロックされています」
というエラーが出ます。どういう風に書けばよいのでしょうか?
また、aaaの文字列の配列に直接値を入れたとしてもselectionに反映されません。これもどうすればよいのでしょうか?
勉強中に作ってみたものなので、特にこのコードを使って何かを処理するわけではありません。
コレクションをうまく使ってみたいと思っています。
よろしくお願いします。
Sub a()
Dim aaa
Dim m
aaa = Selection
For Each m In aaa
If Len(m) <> 5 Then
aaa = ""
End If
Next
End Sub
0506デフォルトの名無しさん
2009/08/15(土) 23:51:17Sub test()
Dim rng
Set rng = Selection
For Each cell In rng
If (Len(cell) <> 5) Then
cell.Value = ""
End If
Next
End Sub
0507デフォルトの名無しさん
2009/08/15(土) 23:55:21おお、すごい!ありがとうございました
0508デフォルトの名無しさん
2009/08/16(日) 00:34:34今後も、できねー、なんで?を連発の予感
0509デフォルトの名無しさん
2009/08/16(日) 00:37:250510デフォルトの名無しさん
2009/08/16(日) 00:39:51同意
更に option explicit を入れないと何となく動くけど、変なエラーが・・・になる
0511デフォルトの名無しさん
2009/08/16(日) 00:46:42俺だけかな
0512415
2009/08/16(日) 08:44:11既に目を通してくれた方には煩わしいかもしれませんが
未解決のまま流れているので再投させていただきます。
オートシェイプに背景画像を挿入する場合についての質問です。
手動でやる場合、
・オートシェイプの書式設定
・塗りつぶし
・色
・塗りつぶし効果
・図
・図の選択
で、画像を挿入した際に、同ページに
□図の縦横比を固定する
□図形に合わせて塗りつぶしを回転する
というオプションがありますが、このオプションをVBAで変更する方法を教えてください。
マクロの記録をしても、変更が記録されずに困っています。
WindowsXP/Office2003
0514デフォルトの名無しさん
2009/08/16(日) 10:17:10「アクティブなシート」の左隣りのシート(画面表示の左隣りのシート)の
名前を取得する方法を教えて下さい。
0515デフォルトの名無しさん
2009/08/16(日) 10:57:52ヒント
Index
ヘルプの"Worksheet オブジェクト"
0516デフォルトの名無しさん
2009/08/16(日) 11:05:31http://www.google.com/search?client=opera&rls=ja&q=excel+vba+%E9%9A%A3%E3%81%AE%E3%82%B7%E3%83%BC%E3%83%88&sourceid=opera&ie=utf-8&oe=utf-8
0517デフォルトの名無しさん
2009/08/16(日) 12:57:41ここだと4つしかなさそうだが
http://msdn.microsoft.com/ja-jp/library/microsoft.office.interop.excel.chartfillformat.userpicture(office.11).aspx
expression.UserPicture(PictureFile, PictureFormat, PictureStackUnit, PicturePlacement)
VBAヘルプでUserPictureを検索しては
0518デフォルトの名無しさん
2009/08/16(日) 13:19:250519514
2009/08/16(日) 14:02:22レスありがとうございます
0520デフォルトの名無しさん
2009/08/16(日) 17:46:59単純にパスワードを掛ければいいんじゃね
0521432
2009/08/17(月) 14:56:16Sub 計算()
Const gensen = 0.15
Const risiwari = 0.05
Const tenbiki = 0.8
Dim i As Long
i = Range("C2")
Range("C4") = i
Range("C6") = Int(i / tenbiki * gensen)
Range("C7") = Int(i / tenbiki * risiwari)
Range("C5") = i + Range("C6") + Range("C7")
0522432
2009/08/17(月) 14:58:40先輩方 ご指導のほどおねがい いたします。
Sub 計算()
Const gensen As Long = 0.15
Const risiwari As Long = 0.05
Const tenbiki As Long = 0.8
Dim i As Long
i = Range("C2")
Range("C4") = i
Range("C6") = Int(i / tenbiki * gensen)
Range("C7") = Int(i / tenbiki * risiwari)
Range("C5") = i + Range("C6") + Range("C7")
End Sub
0523デフォルトの名無しさん
2009/08/17(月) 15:07:19あと使うならsingle
0524432
2009/08/17(月) 15:44:07Const gensen As Single = 0.15
Const risiwari As Single = 0.05
Const tenbiki As Single = 0.8
Dim i As Long
i = Range("C2")
Range("C4") = i
Range("C6") = Int(i / tenbiki * gensen)
Range("C7") = Int(i / tenbiki * risiwari)
Range("C5") = i + Range("C6") + Range("C7")
singleに修正しましたが、まだエラーです。
0525デフォルトの名無しさん
2009/08/17(月) 17:15:020526デフォルトの名無しさん
2009/08/17(月) 17:50:250527432
2009/08/17(月) 18:53:000528デフォルトの名無しさん
2009/08/17(月) 19:21:21どっかのろだにファイルあげるなら中覗いてみるけど現状ではなあ
バージョンは?
0529デフォルトの名無しさん
2009/08/17(月) 19:36:05うちでもエラーでないよ!!
>>マクロが実行できませんとなります。
って事は、マクロ内のコードがエラーとなっていると言うより
エラーメッセージの通り
マクロの コール(呼び出し)が失敗しているんでは?
このマクロをどの様に実行しているかを書いた方がいいかも?
このマクロ標準モジュールにあるんですよね?
あと
Sub 計算() に対する End Sub がないけど省略しているだけですよね
0530デフォルトの名無しさん
2009/08/17(月) 19:59:250531デフォルトの名無しさん
2009/08/17(月) 20:22:24∧∧
ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、
0532デフォルトの名無しさん
2009/08/17(月) 20:38:550533デフォルトの名無しさん
2009/08/17(月) 20:45:34endsub抜くとendsubが必要ですって出るからそれは大丈夫だろう
もしかすると保護されてるセルを変更しようとしたとかそんな感じ/
0535デフォルトの名無しさん
2009/08/17(月) 21:19:340536デフォルトの名無しさん
2009/08/18(火) 09:08:382つのマクロにショートカットキー([Ctrl]+[Shift]+[K],
[Ctrl]+[Shift]+[T])を割り当てているのですが、
シートを表示した状態で、ショートカットキーを押しても
マクロが実行されないことが時々あります。
ファイルを閉じて、開くと、正常に動作します。
どういう時にショートカットキーが効かなくなるのでしょうか?
0537デフォルトの名無しさん
2009/08/18(火) 09:52:580538536
2009/08/18(火) 14:36:03レスありがとうございます。
>キーボード掃除してないとき
どういう具合に掃除すれば良いのでしょうか?
0539デフォルトの名無しさん
2009/08/18(火) 15:09:540540デフォルトの名無しさん
2009/08/18(火) 15:37:570541デフォルトの名無しさん
2009/08/18(火) 15:46:060542デフォルトの名無しさん
2009/08/18(火) 19:04:39altかF10押してている、セルの編集中、他のマクロのデバッグ厨など
他はマクロそのものに原因があるんじやないかな
0543デフォルトの名無しさん
2009/08/18(火) 23:05:590544デフォルトの名無しさん
2009/08/19(水) 06:15:58例えば選択したオートシェイプを操作するマクロ
オートシェイプを選択して、ショートカットキーでマクロを発動すると
Selectionで選択しているオートシェイプが取得できるが
ボタンでマクロを発動すると、Selectionで取得できるのは最後に選択していたセルになる
他にはシート範囲が広い場合
ウインドウ枠の固定を使っていて、左上にボタンが配置できるという好条件ならいいが
そうでない場合は、使いたいときにボタンが表示欄外という自体が起こる
まあメニューバーやツールバー、ユーザーフォームなど、上記のような場合も対策はあるが
「ボタン化すればいいだけ」とは限らないって事だけは覚えておこう
0545デフォルトの名無しさん
2009/08/19(水) 06:53:450546デフォルトの名無しさん
2009/08/19(水) 06:59:35callで解決するだろカス
0547デフォルトの名無しさん
2009/08/19(水) 08:54:050548デフォルトの名無しさん
2009/08/19(水) 08:54:08ほほう
0549デフォルトの名無しさん
2009/08/19(水) 18:05:310550デフォルトの名無しさん
2009/08/19(水) 18:41:570551デフォルトの名無しさん
2009/08/19(水) 19:12:47半角数字が5つ続く場所の位置ってどうやったら調べれますか?
数字は具体的なものじゃなく、どんな数字でもいいから5つ連続です。
ご教授お願いします。
0552デフォルトの名無しさん
2009/08/19(水) 19:33:130553デフォルトの名無しさん
2009/08/19(水) 19:56:27朝見た時は絶句したが、反論はしないでおこう。使い分けは必要だからな。
>536
まずはボタンか画像にマクロ登録して、ショートカットキーによる問題なのか切り分け検証をしてみたらどう?意味無かったかな?
その上でSHIFTを抜くとか簡略化してみては?
0554デフォルトの名無しさん
2009/08/19(水) 20:49:15半角数字が6つ続く可能性と、そのときの処理は銅考えるの?
0555デフォルトの名無しさん
2009/08/19(水) 20:58:270556デフォルトの名無しさん
2009/08/19(水) 21:03:270557デフォルトの名無しさん
2009/08/19(水) 21:18:100558デフォルトの名無しさん
2009/08/19(水) 21:21:29dim i as integer
redim s(1 to len(range("A1").value))
for i=1 to ubound(s)
s(i) = mid(range("A1").value, i, 1)
next i
for i=1 to (ubound(s)-4)
if isnumeric(s(i)*s(i+1)*s(i+2)*s(i+3)*s(i+4)) then
exit for
endif
next i
こんな感じ?
0559デフォルトの名無しさん
2009/08/19(水) 21:57:51>>552
[0-9]{5}
便利だから覚えて損無し
0560デフォルトの名無しさん
2009/08/19(水) 22:42:150561デフォルトの名無しさん
2009/08/20(木) 00:31:26制御はできないんですか?
0562デフォルトの名無しさん
2009/08/20(木) 06:28:12End Sub
0563デフォルトの名無しさん
2009/08/20(木) 11:11:01そのままでもWinXP、Excel2003で正常に動作しますか?
『基本的には』大丈夫らしいのですが、保障が欲しいのです。
また、Excel2000と2003のVBAの互換性・変更点について書かれたページがあれば教えてください。
(セル操作関数(SUMとか)については、特に統計系の関数が強化されたとマイクロソフトサポートで書かれていましたが、
マクロについての互換性・変更点について書かれたページは見つかりませんでした)
MicrosoftOfficeObjectLibraryが9.0から11.0に変わったことで、オブジェクトが追加されたりもしたそうですが、
旧バージョンで作成したマクロが新バージョンで動かなくなるということはないと思うのですが。
(もちろん、新バージョンで作成したマクロが旧バージョンで動かなくなるということはあるでしょうが)
0564デフォルトの名無しさん
2009/08/20(木) 11:37:190565デフォルトの名無しさん
2009/08/20(木) 11:59:420566デフォルトの名無しさん
2009/08/20(木) 12:19:510567デフォルトの名無しさん
2009/08/20(木) 12:22:490568デフォルトの名無しさん
2009/08/20(木) 13:25:00MSのサポート受けたか?
話はそれからだ。
0569デフォルトの名無しさん
2009/08/20(木) 13:25:36右クリックじゃなくて、特定のキーを押した時の制御ってこと?
キー入力をバインドするワークシートイベントはなかったような
アクティブ時にAPIつかって恒常ループしたらいかがが
前略 GetAsyncKeyState Lib ”User32.dll”後略
sub a()
中略
if getasynckeystate(コード番号) 〈> 0 then
実行
end if
スリープ処理
後略
0570デフォルトの名無しさん
2009/08/20(木) 13:51:55ちなみにワークシートの右クリックメニューを表示するなら
application.comandbars(”cell”).showup
0571デフォルトの名無しさん
2009/08/20(木) 14:05:12そしてshowpopupだ
0572536
2009/08/20(木) 16:03:01レスありがとうございます
0573561
2009/08/20(木) 16:29:32例えば右クリックを押した時にシートや選択範囲の状況を見て削除や切り取りを制御しようとしたら
アプリケーションキーでメニューを表示した場合は制御できませんよね?
ブックのアクティブやディアクティブの時も制御を入れたいんで、セレクションチェンジや
シートアクティブのイベントだと対応できないんです…。
何か良い方法無いですかね?
0574デフォルトの名無しさん
2009/08/20(木) 16:30:420575デフォルトの名無しさん
2009/08/20(木) 16:31:45うざいよ。
0576デフォルトの名無しさん
2009/08/20(木) 16:55:01>>569〜
>>575
え?
0577デフォルトの名無しさん
2009/08/20(木) 17:28:520578デフォルトの名無しさん
2009/08/20(木) 18:05:350579デフォルトの名無しさん
2009/08/20(木) 18:11:13もしかしてエクセルがアクティブじゃなくても処理したいってことなの?
方法は無くはなかったけど忘れたでもAPI使うんじゃね
0580デフォルトの名無しさん
2009/08/21(金) 08:22:36ソルバーの制約条件で設定して、解をシートに書き込んでいくマクロを作ったとして
解が見つかった場合はシートに書き込んで、、仮の解が見つからなかった場合には
エクセルのシートに書き込まないという風にする場合は、どのようにしたら
良いでしょうか?
いくつか制約条件を設定した場合に、仮の解が見つからない場合は、いつもある制約条件が
破られてしまって困っております。
お手数ですが、もし教えてやっても良いという方がおりましたらよろしくお願いします。。。
0581580
2009/08/21(金) 09:29:23具体的には、変数を3個使っております。
1、SolverAdd CellRef:="$N$6:P6", Relation:=3, FormulaText:="$G$48"
↑3つの変数は0以上とする制約条件
2、SolverAdd CellRef:="$E$62", Relation:=2, FormulaText:="$G$50"
↑3つの変数を合計1とする制約条件
3、SolverAdd CellRef:="$A$33", Relation:=1, FormulaText:="$X" & i
3、SolverAdd CellRef:="$B$34", Relation:=1, FormulaText:="$Y" & i
3、SolverAdd CellRef:="$C$35", Relation:=1, FormulaText:="$Z" & i
↑3つの変数を、それぞれ特定の数値以下になるようにする制約条件
iはループの(For i = 1 to 10)iです。
4、SolverAdd CellRef:="$E$8", Relation:=1, FormulaText:="$E$9"
↑これは3つの変数にそれぞれ違った数値をかけたものを、ある数値以下に制限するものです。
これらの制約条件を設定すると、1,2,4は守られるのですが、3は破られてしまいます。
4の制約条件を排除した場合は、1,2,3は守られるので、3の制約条件のプログラム自体は間違っていないと思うのですが・・・
制約条件をやぶるばあいは、結果にシートに記述しないという場合はどうしたらよいでしょうか?
0582デフォルトの名無しさん
2009/08/21(金) 09:37:46結果を変数に格納して、条件合致した時だけ書き出せば?
0583580
2009/08/21(金) 19:01:14制約条件を4つ使って出した答えに、また4つの制約条件をクリアしているか
どうかを確かめるということでしょうか?
算出した答えを一回出した後、
If 制約条件4つ then Worksheets("matome").Cells(i, 6) = Worksheets("keisan").Cells(6, 6)
↑Cells(6, 6)が算出した解
みたいな感じということでしょうか?
0584デフォルトの名無しさん
2009/08/21(金) 19:21:24その↑で今やってることをかいてみ
0585580
2009/08/21(金) 19:55:08その物質を作るためにはどの材料を使ってもよく、最終的にA+B+C+D=1となれば問題ありません。
また、どの材料の比率はマイナスになってはいけません。以下がその制約条件です。
また、材料費がA、B、C、Dそれぞれ異なり、A、B、C、Dの材料費をそれぞれ1.1、1.2.1.3、1.4と設定して
物質を作る時に各制約条件をクリアしたなかでの「最小コスト」となるような線形計画問題です。そのセルはH1と設定しております。H1=1.1×A1+1.2×B1+1.3×C1+1.4×D1といった感じです。この場合の変数(それぞれの材料の量)はA1、B1、C1、D1です。
具体的には以下のプログラムです。
1、Solverok setcell:="$H$1", MaxMinVal:=2, ByChange:="$A$1:$D$1"
2、SolverAdd CellRef:="$E$1", Relation:=2, FormulaText:="$F$1"←セルE1はセルA1〜セルD1の合計(材料の量の合計です)
3、SolverAdd CellRef:="$A$1:$D$1", Relation:=3, FormulaText:="$G$1"、セルF1は1、セルG1は0が代入してあります。
0586580
2009/08/21(金) 19:56:06例えば、AとBはいくらでも使えるが、C、Dは全く使えない等。上限の合計は1ではなく、2と設定しています。A、B、C、Dの上限の制約条件は以下の通りです。
4、SolverAdd CellRef:="$A$1", Relation:=1, FormulaText:="$W" & i
5、SolverAdd CellRef:="$B$1", Relation:=1, FormulaText:="$X" & i
6、SolverAdd CellRef:="$C$1", Relation:=1, FormulaText:="$Y" & i
7、SolverAdd CellRef:="$D$1", Relation:=1, FormulaText:="$Z" & i
そして最後に、物質をつくるときに材料によって排出される汚染物質の量がことなるので、排出される汚染物質の上限を定めました。
8、SolverAdd CellRef:="$I$1", Relation:=1, FormulaText:="$J$1"←セルI1は汚染物質の合計量で、セルA1〜D1に汚染物質係数をかけたものを合計したものです。セルJ1は排出しても良い汚染物質の量の上限です。
このようにして計算すると、制約条件が満たされなかった場合でも、無理やり解が算出されてしまいます。具体的には4、5、6、7の制約条件がいつも破られてしまいます。
制約条件を満たせなかった場合は解の記述を行わないということはできないでしょうか?
0587デフォルトの名無しさん
2009/08/21(金) 20:07:47パソコンの画面にEXCELシートの1行目〜40行目まで表示されている状態から、
1001行目〜1040行目が表示されている状態にする方法があれば教えて
下さい(スクロールできなく、ジャンプする感じ)。
セルA1001をselectしたらできかと思ったら、できませんでした。
よろしくお願いします。
0588デフォルトの名無しさん
2009/08/21(金) 20:18:400589デフォルトの名無しさん
2009/08/21(金) 20:19:40ちょっといろいろと確認してみるけど機体しないでくだしあ
かるくぐぐったけどこんなかんじかな?
http://efcit.co.jp/cgi-bin5/exqalounge.cgi?print+200902/09020005.txt
>587
Range().selectで出来た木がするけども
まあ使うならScrollColumnかな
0590580
2009/08/21(金) 22:32:40いろいろとアドバイスありがとうございました。とても参考になりました。
最終的に、最適解を算出した後に、その解が以下の制約条件をクリアしているかを
If文でもう一度検証するという形で、なんとかすることができました。
4、SolverAdd CellRef:="$A$1", Relation:=1, FormulaText:="$W" & i
5、SolverAdd CellRef:="$B$1", Relation:=1, FormulaText:="$X" & i
6、SolverAdd CellRef:="$C$1", Relation:=1, FormulaText:="$Y" & i
7、SolverAdd CellRef:="$D$1", Relation:=1, FormulaText:="$Z" & i
0591デフォルトの名無しさん
2009/08/21(金) 22:33:46一方ロシアはテンポラリのターゲットセルを用意して
VBAで制約条件を判定の後に必要があれば本来のターゲットセルに書き出した
0592デフォルトの名無しさん
2009/08/21(金) 23:02:19だとすると条件指定が不十分なのでは
解が見つからなかったかどうかは
solversolve(true)
の戻り値で0が解あり、1が解なし
片方の制約で動作するっていうことなら、2回実行して両方のsolversolve(true)を満たした場合のみ記述することは可能ぽくね
0593デフォルトの名無しさん
2009/08/21(金) 23:03:55音速が遅いな・・・
0594580
2009/08/22(土) 02:44:54おお!そちらの方がずっと効率的ですね!
ありがとうございます。
0595デフォルトの名無しさん
2009/08/22(土) 20:27:16Dim cols As Range
Dim x As Range
Set cols = ActiveSheet.Columns 'アクティブなシートのすべての列を表す Rangeオブジェクト
Set x = cols.Item(3, 3) 'エラー
cols.Itemの正しい呼び出し方を知るには、
ヘルプのどの部分を見れば良いのか教えてください。
ヘルプから、Rangeコレクション → Itemプロパティの使い方を調べると、
expression.Item(RowIndex, ColumnIndex)
と記載されていますが、これは調べ方が間違っているということでしょうか?
0596デフォルトの名無しさん
2009/08/22(土) 21:12:28調べ方は間違ってないけど、ヘルプに書いてあるのはあくまでも一つの例だから、応用しないといけない。
これを試してみれば、変数colsが何のコレクションになってるかわかると思う。
Dim cols As Range
Dim x As Range
Set cols = ActiveSheet.Columns
Set x = cols.Item(3)
x.Value = "abc"
0597デフォルトの名無しさん
2009/08/22(土) 21:57:07ありがとうございます。
試行錯誤してみるしかない訳ですね。
予想は付くものの、ドキュメント化されていないというのはアレですね。
0598デフォルトの名無しさん
2009/08/22(土) 22:02:19相談にのって欲しい事があり質問させて下さい。
あるユーザフォーム内のオプジェクト(実際には TreeViewオプジェクト)
で右クリックしたらポップアップメニューを出すようにしたんですが
ポップアップメニューでフォーム内のプロシージャ(Publicな)を.OnAction で設定すると
実行時 Xアイコンのダイアログ表示( 表示内容は 400 としか出ない)となってしまうのです。
現在は、一度標準モジュールを経由する事でエラーを回避させているのですが
ポップアップメニューにてフォーム内のプロシージャを★直接指定★する良い方法はないでしょうか?
(フォーム内の処理はフォーム内で完結させたいので)
エラー時のポップアップメニュー
With CommandBars.Add(Name:="TestPopup1", Position:=msoBarPopup)
With .Controls.Add(Type:=msoControlButton)
.Caption = "データ更新"
.OnAction = "frmTest.FUPD" 'フォーム内のプロシージャ
End With
End With
回避策ポップアップメニュー
With CommandBars.Add(Name:="TestPopup1", Position:=msoBarPopup)
With .Controls.Add(Type:=msoControlButton)
.Caption = "データ更新"
.OnAction = "FX_UPD" '標準モジュールのプロシージャ
End With
End With
標準モジュール
Private Sub FX_UPD()
Call frmTest.FUPD
End Sub
0599デフォルトの名無しさん
2009/08/22(土) 22:16:360600デフォルトの名無しさん
2009/08/22(土) 22:32:49マクロでソルバーを使う場合に精度の上げ方がわかりません。
どなたかマクロでソルバーを使う際に精度を上げる方法を知っている方が
いらっしゃったら、ご教授ください・・・
0601587
2009/08/23(日) 09:47:51レスありがとうございます
0602デフォルトの名無しさん
2009/08/23(日) 22:16:300603デフォルトの名無しさん
2009/08/24(月) 00:13:200604デフォルトの名無しさん
2009/08/24(月) 00:51:15Private Sub Userform1_Initialize()
Dim strWORK As String
Me.Listbox1.clear
ChDir ThisWorkbook.Path
strWORK=Dir("*表*",vbNormal)
While strWORK <> ""
ME.Listbox1.AddItem (strWORK)
strWORK=Dir()
Wend
End Sub
ユーザーフォームのリストボックス1にカレントフォルダ内の「表」という文字が入ったファイル名を追加したいんですが
一回目に実行した時に追加されたリストが更新されません。
おかしいと思いカレントフォルダを調べてみたところ、ChDir ThisWorkbook.Pathと入れているのにそこでカレントフォルダが変更されていませんでした。
上記のコードのどの辺に問題があるでしょうか?
0605デフォルトの名無しさん
2009/08/24(月) 07:36:580606デフォルトの名無しさん
2009/08/24(月) 09:42:22俺も同じ環境でChDirが効かないことが多かったんで
起動パス以外のファイル操作の時は、全部直接パス込みのファイル名指定してファイル開いてる
0607デフォルトの名無しさん
2009/08/24(月) 10:32:000608デフォルトの名無しさん
2009/08/24(月) 10:54:07はchDriveの話しね
0609デフォルトの名無しさん
2009/08/24(月) 10:55:16なんでファイル名を一個しか取得しないのはなぜなんだぜ?
0610デフォルトの名無しさん
2009/08/24(月) 11:04:14フォルダに表なんとか1.xlsを作って試行
リストに追加されたヤター
フォルダに表なんとか2.xls以下を作って実行
1以外追加されてないじゃん!
0611デフォルトの名無しさん
2009/08/24(月) 11:19:12dirは繰り返さないと
ヘルプ見ないといかんよ
>>610
さすがエスパー
0612デフォルトの名無しさん
2009/08/24(月) 13:11:58一番初めのファイルだけを毎回取得してるのに気が付かず、
他のファイルがリストに出ないです>q〈
ですな?
0613デフォルトの名無しさん
2009/08/24(月) 18:53:59カレントフォルダが変更されていない件に関して
現在のドライブと ThisWorkbook.Path のドライブが異なっていませんか?
たとえば
カレントデレクトリが C:\My Documents
ThisWorkbook.Path が D:\HogeHoge
の時、
ChDir ThisWorkbook.Path
としても
カレントデレクトリは C:\My Documents のままですよ
ChDir ThisWorkbook.Path
ChDrive "D"
として現在のドライブも変更して下さい。
ちなみに
ChDir ThisWorkbook.Path
ChDrive ThisWorkbook.Path
でもいいようです(HELPによると)
0614デフォルトの名無しさん
2009/08/24(月) 23:44:12ありがとうございます。
みなさんが言われているとおりドライブが変更されていませんでした。
application.defaultfilepath=thisworkbook.path
と設定したら無事追加されました。
ちなみに>>609-612で指摘されている件に関してはググって出てきたサイトの通りにやっていて
そこは変更せずにいけたみたいです。
ただ私もよく理解できないんですがなぜ
strWORK=Dir("*表*",vbNormal)
While strWORK <> ""
ME.Listbox1.AddItem (strWORK)
strWORK=Dir()
Wend
これでファイル名がすべて取得できるのでしょうか?これだと2回目以降「表」の入ったファイルを取得できないと思うのですが
なぜかできました。
0615デフォルトの名無しさん
2009/08/25(火) 00:08:30Dir関数は1回目に呼ばれた時にパラメータを覚えておいて、
2回目以降はパラメータ無しで呼ぶ、という設計になっているからです。
これを設計した人が何を考えていたかはわかりませんから、
理解するのではなく、そういう物だと暗記して使うしかありません。
0616デフォルトの名無しさん
2009/08/25(火) 01:27:500617デフォルトの名無しさん
2009/08/25(火) 09:51:21文字列含むやつだっけ?
前スレ?
0618デフォルトの名無しさん
2009/08/25(火) 10:02:01ggrks
0619デフォルトの名無しさん
2009/08/25(火) 10:43:06文字列をコードに変換して並べ替え……そんな簡単なもんだっけ
0620デフォルトの名無しさん
2009/08/25(火) 15:12:36http://www.ipa.go.jp/security/rfc/RFC2104JA.html
↑このページにあるHMACというメッセージダイジェスト(暗号化された文字列)の作成を、Excel VBAでやろうとしています。
c = a Xor b
という計算をしたいのですが、Xor は、bとcの型が文字型(String)だとエラーになりました。
bとcの型が数値型(ByteやInteger)だとエラーになりませんでした。
そこで、
文字列1 = 文字列2 Xor 文字列3
をやりたい場合、いったん文字型(String)の変数に格納しておいた文字列2と文字列3を、数値型(ByteやInteger)に変換してからXor計算をやることになると思います。
Xor計算をするために、前段階の準備として文字型を数値型に変換する場合、どんな数値型の変数を用意すればいいのでしょうか?
0621デフォルトの名無しさん
2009/08/25(火) 15:53:57R= [true/false] XOR [true/false]
だからやるならば
りざると = (文字列1 = 暗号1) XOR (文字列2 =暗号2)
のように記述する
戻りはtrue/falseしかないから、型を使うならboolean
0622デフォルトの名無しさん
2009/08/25(火) 16:01:550623デフォルトの名無しさん
2009/08/25(火) 16:30:31いまいち分からなかったXORの意味がよく分かりました。
どうもありがとうございます!
0624デフォルトの名無しさん
2009/08/26(水) 00:30:24Windows XP
Excel 2003 SP3
ある値の範囲に対して標準偏差を取りたいのですが、
範囲が固定ではなく、変動する場合に算出する方法が分かりません。
サンプルプログラム
Sub Test()
Dim wInt1 As Integer
Dim wInt2 As Integer
Dim wInt3 As Integer
Dim wStr As String
Dim wStDevp As Double
wInt1 = 10
wInt2 = 20
wInt3 = 30
wStr = Str(wInt1) & "," & Str(wInt2) & "," & Str(wInt3)
wStDevp = WorksheetFunction.StDevP(wStr) ←ここでエラー
End Sub
上記のようなプログラムを作成しましたが、矢印の箇所でエラーとなりました。
サンプルのため、値は3つと固定していますが、
範囲が変動する場合においても算出する方法はありますでしょうか?
よろしくお願いします。
0625デフォルトの名無しさん
2009/08/26(水) 03:08:31StDevP()の引数を配列にしておけばいい。
動的配列にして、範囲がわかったところで再定義を行う。
Sub Test()
Dim wInt() As Integer 'とりあえず、要素数無しの動的配列で定義しておく
Dim wStDevp As Double
ReDim wInt(2) '範囲が確定したところで再定義
wInt(0) = 10
wInt(1) = 20
wInt(2) = 30
wStDevp = WorksheetFunction.StDevP(wInt)
End Sub
0628627
2009/08/26(水) 22:24:33出来ました!ありがとうございます!
これまでは、
作業用のスペースに対象の値をコピー→標準偏差を算出
としていて、処理速度が遅かったのですが、教えて頂いた方法で処理速度が上がりました!
0629デフォルトの名無しさん
2009/08/26(水) 22:27:13現在オープンされているブック(Addinも含む)の一覧を取得しようと
下記サンプルのようにしているのですが
'(book名とプロジェクト名を表示します)
Sub TEST()
'通常のブック
For Each Wk In Workbooks
Debug.Print Wk.Name, Wk.VBProject.Name
Next
'Addinブック
For Each ad In Application.AddIns
If ad.Installed Then
Debug.Print ad.Name, Workbooks(ad.Name).VBProject.Name
End If
Next
End Sub
これだとIsAddin=True が設定してあるBook(Addinへは登録していない)が
表示されていないのです。
色々調べて
For Each Wk In Application.VBE.VBProjects
Debug.Print Wk.Name
Next
とするとオープンされている全てのブックのプロジェクト名を取得できる事は判明したのですが
ここから先(BooK名取得)で煮詰まってしまっています。
どの様にしたら全てのオープンされているブックのBooK名取得が出きるでしょうか?
0630デフォルトの名無しさん
2009/08/27(木) 02:10:49表A
開始日 終了日
--------------------
2009/9/1 2009/9/2
2009/9/2 2009/9/5
2009/9/2 2009/9/3
表B
基準日 9/1 9/2 9/3 9/4 9/5
開始日 1 3 3 3 3
終了日 0 1 2 2 3
表Aの開始日と終了日をカウントして、基準日に該当する件数を書き出したいのですが、
関数はVLOOKUPを使えばいいのでしょうか?
件数は累計を表示したいのですが、どの関数を使えばいいのでしょうか?
本当に初歩的な質問ばかりですみません。。
0631デフォルトの名無しさん
2009/08/27(木) 02:47:31DSUMとかDCOUNT、またはCOUNTIF
いずれもVBAとは無縁
0632630
2009/08/27(木) 03:54:49ワークシート関数ではなく、マクロを使用して作成したいのです。
'-----------------------------------------------------------------------------------------
Sub 進捗表を作成する()
進捗シートの有効範囲を調べる
If 下 < 9 Then '十分なデータがあるかチェックする
MsgBox "データが少ないので作業を続けれません", vbCritical, "進捗表作成"
Exit Sub
End If
End Sub
'-----------------------------------------------------------------------------------------
Private Sub 進捗管理シートの有効範囲を調べる()
Sheets("進捗管理").Select
ActiveSheet.Unprotect 'シート保護解除
下 = Range("C3").End(xlDown).Row '項目の列の下端選択
End Sub
'-----------------------------------------------------------------------------------------
Private Sub 開始日をカウントし、件数を表示する()
Select Case <任意の数式または文字列>
Case セルA1〜A15とセルD1の日付が一致する場合
カウントした件数を表示
Case セルB1〜B15とセルD1の日付が一致する場合
カウントした件数を表示
Else
セルが空白なら0を表示
End Select
End Sub
0633630
2009/08/27(木) 04:00:51考え方がこれであってるのかも自信ないです。。
取引先に急遽頼まれて作成しているので、明日(というか今日)出来ていないと
まずいです。。
どなたかアドバイスをお願いします。
0634デフォルトの名無しさん
2009/08/27(木) 04:42:41Countifの繰り返しじゃだめなの?
0635630
2009/08/27(木) 04:52:12COUNTIFの繰り返しはFor〜Nextを使えばいいんですか?
0636デフォルトの名無しさん
2009/08/27(木) 07:09:240637デフォルトの名無しさん
2009/08/27(木) 12:00:10'シートをコピーし、一番後ろにシートを代入する
Sheets(Array(strCopySheetName1, strCopySheetName2)).Copy After:=Sheets(strCopySheetName2)
上記方法では、シート2の直後にシート1・シート2がコピーされます。
これを、シート1をシート1の直後に、シート2をシート2の直後にコピーするにはどうすればよいでしょう?
0638デフォルトの名無しさん
2009/08/27(木) 13:21:150639デフォルトの名無しさん
2009/08/27(木) 16:55:00列を削除してもUsedRange.Columns.Countの値が変わりません。
Dim wbk As Workbook, i as Long
Activesheet.Copy
Set wbk = Activeworkbook
For i = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
If ActiveSheet.Columns(i).Hidden Then ActiveSheet.Columns(i).Delete
Next
教えて頂けたら有難いです。
0640デフォルトの名無しさん
2009/08/27(木) 22:05:21削除処理したい範囲と 実際の削除処理をしている範囲が違うから
0641デフォルトの名無しさん
2009/08/28(金) 09:57:50A列の1行目からデータ末行までループ処理するというのは、よくあることだと思うのですが、そんな場合データが5行なら
A1:A5範囲のRangeオブジェクトを取得してFor Eachでループを回すと思います。(For...Nextでも可能ですが)
そして、「A列の1行目からデータ末行まで」のRangeオブジェクトを取得する方法はいくつか有りますが
そのうちのひとつで不可解な現象(自分が無知なだで当然の現象なのかも知れませんが)が起きます。
それはUsedRange.Columns(1)と取得した場合です。これに対してFor Eachループを回すと、
ループせずに、ループ変数にA1:A5がそのまま入って、1回でFor Eachを抜けてしまいます。
Range("A1:A5")と直接指定した場合はもちろんのこと、Intersect(UsedRange, Columns(1))や
Range(Range("A1"), Cells(Cells.Rows.Count, 1).End(xlUp))などでは
ちゃんとA1〜A5まで5回のループが回ります。
UsedRange.Columns(1)でもそれ以外の正常にループが回る方法でも
TypeNameで見ればRangeですし、Addressプロパティも完全同一です。
なぜ完全同一範囲のRangeオブジェクトに対するFor Eachループが回ったり回らなかったりするのでしょうか?
以下、検証用コードを貼ります。
0642デフォルトの名無しさん
2009/08/28(金) 09:59:56Const Col1Range = "A1:A5"
Sub Test1()
Dim Result As String
With Worksheets.Add
.Range(DataRange).Value = "a"
Result = Result & Test2(.Range(Col1Range), "Range(""" & Col1Range & """)")
Result = Result & Test2(.UsedRange.Columns(1), "UsedRange.Columns(1)")
Result = Result & Test2(.Range(.Range("A1"), .Cells(.Cells.Rows.Count, 1).End(xlUp)), "Range(Range(""A1""), Cells(Cells.Rows.Count, 1).End(xlUp)")
Result = Result & Test2(Intersect(.UsedRange, .Columns(1)), "Intersect(.UsedRange, .Columns(1))")
MsgBox Result
Application.DisplayAlerts = False: .Delete: Application.DisplayAlerts = True
End With
End Sub
Function Test2(LoopRange As Variant, Explanation As String) As String
Dim LoopCell As Range, LoopCounter As Long, Result As String
Result = Result & "取得方法:" & Explanation & vbCrLf & vbCrLf
Result = Result & "型:" & TypeName(LoopRange) & " / " & "範囲:" & LoopRange.Address(0, 0) & vbCrLf & vbCrLf
For Each LoopCell In LoopRange
Result = Result & LoopCell.Address(0, 0) & " "
LoopCounter = LoopCounter + 1
Next LoopCell
If LoopCounter <= 1 Then Result = Result & "範囲でループしせんでした" & vbCrLf _
Else Result = Result & "の" & LoopCounter & "個のセルをループしました" & vbCrLf
Test2 = Result & vbCrLf & String(20, "-") & vbCrLf & vbCrLf
End Function
0643デフォルトの名無しさん
2009/08/28(金) 10:20:450644デフォルトの名無しさん
2009/08/28(金) 10:34:42先にも書きましたが、型(TypeName)は全てRangeです。
0645デフォルトの名無しさん
2009/08/28(金) 10:38:470646デフォルトの名無しさん
2009/08/28(金) 10:45:58結果が得られなくて困っているわけではありません。
ですので「どうすれば良い、何を使え」という話は、失礼ながら求めておりません。
先にも書いた通り、完全同一範囲のRangeオブジェクトに対するFor Eachループが
回ったり回らなかったりする『理由』が知りたいのです。
0647デフォルトの名無しさん
2009/08/28(金) 10:48:31複数のセル範囲を含む Range オブジェクトに対して Columns プロパティを使用すると、
選択範囲の中で最初に選択した領域の列が返されます。たとえば、Range オブジェクトで
A1:B2 および C3:D4 の 2 つのセル範囲が含まれているとき、Selection.Columns.Count を
実行すると 4 ではなく 2 が返されます。複数のセル範囲を選択している可能性があるときは、
このプロパティを使用する前に Areas.Count を実行し、範囲が複数選択であるかどうかを確認します。
複数選択の場合は、使用例の 3 番目のようにセル範囲の領域ごとにループします。
0648デフォルトの名無しさん
2009/08/28(金) 11:25:29怠惰なのか無能なのか、その両方なのか
それとも努力してそうなったのか
0649デフォルトの名無しさん
2009/08/28(金) 11:46:18そこに書いてあるのは「複数のセル範囲を含む Range オブジェクトに対して」、つまり
┌┬┬┬┬┬┬┬┬┬┬┬
│┏┯┓┼┼┼┼┼┼┼┼
│┠�@┨┼┼┼┏┯┓┼┼
│┗┷┛┏┯┓┠�B┨┼┼
├┼┼┼┠�A┨┗┷┛┼┼
├┼┼┼┗┷┛┼┼┼┼┼
├┼┼┼┼┼┼┼┼┼┼┼
のように2つ以上の矩形範囲を指定した場合の話ですよね?
この場合、Columns.Countは合計の6ではなく�@のみの2を返すから
全てを取得するにはAreas.Countを確認して、�@〜�Bまで領域ごとにループしろと。
0650デフォルトの名無しさん
2009/08/28(金) 14:36:060651デフォルトの名無しさん
2009/08/28(金) 15:22:17問題ないし関係もありませんよ。
Test2は第一引数がRange型であるという前提の関数ではないから型をVariantにしているだけです。
だからLoopRange As Rangeにしても結果は同じですし、更に言うなら、変数を挟まなくても結果は同じです。
0652デフォルトの名無しさん
2009/08/28(金) 15:54:260653デフォルトの名無しさん
2009/08/28(金) 16:53:17格納状態って、格納値のことなら結果の通りですが。
LoopRangeの型のことなら、4条件全てVariant/Object/Rangeです。
0654デフォルトの名無しさん
2009/08/28(金) 17:02:06ヤレヤレ(-_-;)
0655デフォルトの名無しさん
2009/08/28(金) 18:12:28>回ったり回らなかったりする『理由』が知りたいのです。
そのループは、お前が思ったものをループしてるんじゃないからな
For Each LoopCell In LoopRange.Cells
だとお前の思うとおりのループだ
型と範囲表示してるとこに、LoopRange.Count表示させてみ
同じ範囲でも同じRangeオブジェクトだとは限らないってことだ
しかし実際はこれ何をループしてるか不明w
Areas.Countは全部1だったりしてるし...
これ以上は俺は調べる気力がない
0656デフォルトの名無しさん
2009/08/28(金) 19:27:58理由はいろいろあるけど、態度が慇懃なだけじゃやっぱだめなんだよな、レスの初めか最後に
「14歳jcです><」って書かないと
0657デフォルトの名無しさん
2009/08/28(金) 19:53:44なんか人に物を尋ねる態度ではないですよ
>>655さんも言っている通り
.UsedRange.Columns(1) のカラム数は1だから .UsedRange.Columns(1).count=1なのでは?
試しに 検証用コードに
.Range(DataRange).Columns(1)
.Range(Col1Range).Columns(1)
とした 2行のコードを追加したら これも1回しかループしない
.UsedRange.Columns(1)
.Range(DataRange).Columns(1)
.Range(Col1Range).Columns(1)
この3つは Columns指定がある為、count=1 なので
forループも1回しか動作しないんではない?
0658デフォルトの名無しさん
2009/08/28(金) 19:54:45すんません検証してしまいました
0659デフォルトの名無しさん
2009/08/28(金) 19:57:17あなた良い人ですね><
0660デフォルトの名無しさん
2009/08/28(金) 22:39:37UsedRange.Columns(1).Cellsならセルの集合だからセルの個数だけ回る。
UsedRange.Resize(,1)でもセルの個数だけ回るけどね。
0661デフォルトの名無しさん
2009/08/28(金) 23:54:45これ以上書くのもなんだけど
そもそも
For Eachループって
オブジェクトの各要素に対して一連のステートメントを1回実行するものだから
10要素あるものは10回ループするし
1要素しかなければ1回で終わるし
んで何要素あるかは Countプロパティ見れば分かると
1要素しかない状態ではどんな事やったって1回で終わる
どうしてもやりたけりゃ Cells なんかで要素を分解してやる
と小難しく書いてみました
0662デフォルトの名無しさん
2009/08/29(土) 07:47:13宣言やプロパティを明示することで勘違いを防ぎやすくなる
0663デフォルトの名無しさん
2009/08/29(土) 08:20:37結果から直結する事由を、ただ長々と書き連ねてるだけw
0664デフォルトの名無しさん
2009/08/29(土) 12:28:420665デフォルトの名無しさん
2009/08/29(土) 15:02:120666デフォルトの名無しさん
2009/08/29(土) 17:45:18というわけでスレチなんだが、VBAに精通したみなさんならいいコメントがいただけるような気がして投稿します。
FAX送信書をWordで作っています。
そのテンプレファイルに保存ボタンを作りたいのですが…
たとえば
"【FAX送信書】2009年8月28日1740_ABC株式会社.doc"
のような感じで自動的にファイル名を吐き出して保存したいと思います。
Excelではセルの文字列を参照するだけなので分けないのですが、Wordで会社名を任意の行から取ってきて代入する方法を誰か知りませんでしょうか。
Excelで作れよYO!ってことなのでしょうか。
0667デフォルトの名無しさん
2009/08/29(土) 21:35:28word自体がそもそも使われないし、wordでマクロ使う機会が無い
マクロを記録で、ファイル名をつけて保存
後は任意の行はinputboxあたりで指定して、そのrowkvalueをファイル名として保存は出来ないの?
0668デフォルトの名無しさん
2009/08/29(土) 21:36:25まぁ、使ったこと無いんで全然違ってたらスマン。とりあえずexcelに当てはめてみただけ
0669デフォルトの名無しさん
2009/08/31(月) 00:11:56質問なのですが、
2つのExcel BOOKがあります。そのうち
例
商品名 商品コード 価格 *** ***** ***
セロハンテープ KHUD027008 1560円 ****** ********** ******
スティック糊 HKPIF00028 1640円 ****** ********** ******
****** ********** ****** ****** ********** ******
****** ********** ****** ****** ********** ******
****** ********** ****** ****** ********** ******
BOOK2は各店舗ごとの売上げ商品一覧です
(店舗名、商品名、商品コード、販売日時、等)
例
店舗名 商品名 商品コード 販売日 **** ***
新宿店 スティック糊 HKPIF00028 090728 ******** ******
銀座店 セロハンテープ KHUD027008 090825 ******** ******
****** ******** ********** ****** ******** ******
****** ******** ********** ****** ******** ******
商品コードをキーに検索して、BOOK2からデータを引張って
BOOK1に店舗名を表示したいのですが
計算式が分かりましたら御教授お願い致します。
m( _ _ )m
0670669
2009/08/31(月) 00:13:360671デフォルトの名無しさん
2009/08/31(月) 00:17:360672デフォルトの名無しさん
2009/08/31(月) 01:39:05この条件だけだと絞り込めない気がする
つか最初から教えてってのは無理があるよ
自分はこの様にしたけど ここがうまくいかないんだけどって質問しないと
ところでこのスレは、Excel VBA質問スレなんだが VBAで処理するのかな?
0674デフォルトの名無しさん
2009/08/31(月) 08:33:040675デフォルトの名無しさん
2009/08/31(月) 09:12:47a = "hoge"
x = sheetName.Evaluate("sumproduct((D2:D5=""" & a & """)*(F2:F5))")
はOK、
x = sheetName.Evaluate("sumproduct((D2:D5=" & a & ")*(F2:F5))")
はNGになる理由をアフォにわかるように説明してください。
0676デフォルトの名無しさん
2009/08/31(月) 09:17:37Cells(1, 1) = "abc" → セルの値は「abc」になる
Cells(1, 1) = "a""bc" → セルの値は「a"bc」になる
Cells(1, 1) = """abc""" → セルの値は「"abc"」になる
0677デフォルトの名無しさん
2009/08/31(月) 09:52:12はじめとおわりにつく"は文字列であることを表す記号で、
二重の""は正規表現の\\(エスケープ文字+\)みたいなものか。
0678デフォルトの名無しさん
2009/08/31(月) 14:17:120679デフォルトの名無しさん
2009/08/31(月) 16:12:030680デフォルトの名無しさん
2009/08/31(月) 18:53:16書式→保護でロックのチェックを外し、シートに保護をかけた状態で
そのロックを外したセルに対して
Cells(10, 3).NumberFormatLocal = "yyyy/mm/dd"を実行すると
RangeクラスのNumberFormatLocalプロパティを設定できません。
というエラーが出ますが、これの回避策は無いのでしょうか?
※保護を解除した状態で実行すると何の問題も起きないんですが
0681デフォルトの名無しさん
2009/08/31(月) 18:58:02おもしろいことをおっしゃる方ですね。
0682デフォルトの名無しさん
2009/08/31(月) 19:37:40ヒント
Unprotect メソッド
Protect メソッド
Protect UserInterfaceOnly:=True
詳細はHELP参照
0683デフォルトの名無しさん
2009/08/31(月) 20:19:45有難う。調べてみます
0684デフォルトの名無しさん
2009/08/31(月) 23:27:22散布図でグラフを作りたいんですけど、
C列の上から
・・・・・・-1.1、-0.5、0、1、2、5、・・・3、2、1、0、-0.2、-0.7、-1・・・
と並んでて、
それをマクロで0を探し出し、
0から始まって、0で終わる範囲でグラフを表示させたいんですけど、
何関数で作ればいいのでしょう?
何せ2000行くらい並ぶので探し出すのが大変なので
マクロで自動的に0を探し出し、ついでにグラフにしてもらうプログラムを作りたいので
よろしくお願いします。
0685デフォルトの名無しさん
2009/08/31(月) 23:51:240686デフォルトの名無しさん
2009/08/31(月) 23:55:57★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
0 を探すのが大変なら、条件付書式で 値が0ならセルを真っ赤で塗りつぶし にでもしたら一目瞭然
もしくは
>685さんのヒントで1個目と2個目のゼロのセル位置を探す。グラフ作成はマクロの自動記録をやってみて。
0687デフォルトの名無しさん
2009/09/01(火) 00:04:39さんきゅ。
ループでやってみたけど本にも似たような記載がなかったので
あれこれやってみたけど中々うまくいかなかったんです・・・。
まだマクロ初めて2日目なんで(汗
>プログラマとは、自分でプログラムを組みコードを書く人の事なので、
ええ、言葉をもっと選ぶべきでした。ソースを教えてという訳でなく、
関数さえ教えていただければ後は自分でやっていこうと投稿しましたんで(汗
マクロの自動記録ですか!その手もありましたんね、
さっそく明日会社でやってみます。
ずいぶん助かりました。ありがとうございますm(_ _)m
0688デフォルトの名無しさん
2009/09/01(火) 00:10:26>>686
>値が0ならセルを真っ赤で塗りつぶし
下書きではないのでこの手は使えないんです・・・
品質記録で残すデータシートに移すやり方なんですね。
あと書き込むボタン押した後に気づいたんですけど、
>1個目と2個目のゼロのセル位置を探す。グラフ作成はマクロの自動記録をやってみて。
このやり方は0がランダムに出てもできます?
機械からプロットされたデータなんでセル番地は決まってないんですね('_';A
0689デフォルトの名無しさん
2009/09/01(火) 01:16:36For Each c In Range("c:c")
if(c.value=0) then
//グラフ処理.
end if
Next
0690デフォルトの名無しさん
2009/09/01(火) 15:40:230は必ず2個しか存在しないのかな?
そもそもの「0から始まって次の0までのデータでプロット」というのがむちゃくちゃな感じがする。
何かの計測器からのデータなんだろうが、0のデータが1個もない場合、0が続けてあった場合、
3個以上あった場合はどうすんだろ。
とりあえず
CELLS(縦位置、横位置).VALUE で当該セル位置の値を取得できる。
縦位置は行そのもの、横位置はA列なら1、B列なら2、C列なら3という具合。
横位置は3、変数Xに初期値0を設定のうえ、
縦位置 を1(もしくは適当な値)から65535(もしくは適当な値)までの FOR〜NEXT で回して
最初に(かつ、変数Xが0だったら)セルの値が0になった縦位置を変数Xに保存
次に(かつ、変数Xが2以上だったら)セルの値が0になった縦位置を変数Yに保存してFOR〜NEXTループを抜ける。
グラフ作成はマクロの自動記録で生成されたコードの データ範囲の行位置の部分 を変数X、変数Yで
置き換える。
0691デフォルトの名無しさん
2009/09/01(火) 20:44:39しなないぜ!(・∀・)
すみません、ヒントをありがとうございますm(_ _)m
>>690
そうなんですよー必ず2つって訳ではないんですぅ、、、
会社ついてよっしゃーやるぞー(ワ゚ー
と、データ見たら0がいくつか出てそこから数字が上がり始めるんですよ(汗
荷重をかけるデータなので必ずマイナスから始まり、0も必ずあるんですね。
うかつでした。
IF関数でいろいろやったけど、うまくいかず。。。
結構四苦八苦したけど何とか光が見えてきそうです(^^)
データ持ち帰ることが出来ないのでまた明日挑戦になりますが('_';A
ともかく、多大なるアドバイス本当にありがとうございます。
0692690
2009/09/01(火) 21:26:26実際になにか散布図グラフを見たことありますか?
描画範囲の中に点を表すためには、縦軸・横軸の数字が必要です。
これまでのやりとりでは、数字はC列にあるだけ。もうひとつのパラメータはないんですか?
「荷重」云々とあるので、荷重データとそれに伴う何かの計測値の2種類の数字データがあるはず。
本当にデータの一部分(最初の0から次の0まで)だけでグラフを作っていいんですか?
0693デフォルトの名無しさん
2009/09/01(火) 22:29:07正の値から0以下の値になるセルを探す
あとは>>690さんのやりかたでOKっしょ
もしくはグラフのプロット範囲の下限を0にするんじゃいかんのかい?
見た目は0以下の数値はカットされるよ
−+−+−+と繰り返すデータなら複数まとめてプロットされるけど
0694デフォルトの名無しさん
2009/09/01(火) 22:56:58操作するのにわざわざリボンのタブを切り替えないといけないんですが、これを改善する方法ってあるのでしょうか?
どなたかご教授下さい。
0695691です
2009/09/01(火) 23:40:33さすが、するどいなぁ(^^;A
もちろんもう一つのパラメータありますよ(^^)
自力で何とかすることを前提のスレだとゆーことを念頭に置いてましたんで
あえて1つの列でコメントしてたんですね('_';A
>>693
あ、確かそういう機能もありましたね
普通の操作で軸の設定できますね、盲点でした('_';A
でもグラフがN型になるようにしますんでうまくいき、、、そうですねw
試してみます(^^)
0696デフォルトの名無しさん
2009/09/02(水) 11:59:56Sheet1に、
Sub ソートのテスト()
Range("A1").CurrentRegion.Sort Key1:=Range("B1")
End Sub
'Sheet2に、
Sub test()
ComboBox1.Clear
ComboBox1.AddItem "ソートする"
End Sub
Private Sub ComboBox1_Change()
If ComboBox1.Value = "ソートする" Then
Sheet1.ソートのテスト
End If
End Sub
で、コンボボックスでソートするを選んだらエラーになる(Excel2003)。
コンボボックスからの変更は、
userInterfaceからの変更と見なされるの?
0697デフォルトの名無しさん
2009/09/02(水) 12:00:470698デフォルトの名無しさん
2009/09/02(水) 21:10:23厳しいようですが 本当に解決したいのなら
"エラーになる"だけでなく
どのようなメッセージが出たかぐらいは書いて下さい!!
テストしたけど当方の環境下では、
(メインPCは他で使用中の為、かなり古いノートPC(Excel97)でテストした)
プロテクトしていない状態でもエラーになるようですが
プロテクトしていない状態でテストしましたか?
0699デフォルトの名無しさん
2009/09/02(水) 23:18:15For Each c In Range("c:c")
が顔文字に見える
0700デフォルトの名無しさん
2009/09/02(水) 23:57:300701デフォルトの名無しさん
2009/09/05(土) 00:57:340702デフォルトの名無しさん
2009/09/05(土) 16:22:07誰もあると言ってないから、あるかどうか聞いてるんじゃないのかな
0703デフォルトの名無しさん
2009/09/05(土) 17:20:53ないかどうかを聞いていないのだから一方的にあるだけに言及するのは危険じゃあないか
0704デフォルトの名無しさん
2009/09/05(土) 17:22:480705デフォルトの名無しさん
2009/09/05(土) 20:24:560706デフォルトの名無しさん
2009/09/05(土) 20:42:130707デフォルトの名無しさん
2009/09/05(土) 20:49:330708デフォルトの名無しさん
2009/09/05(土) 21:02:47親フォームの中に子フォームがあり、
検索ワード(コンボボックスの中の値)を入力し、検索ボタンを押すと、
子フォームの対象フィールドの値と検索ワードが同じレコードのみを抽出するvbaを組んでいます。
Private Sub btn_検索_Click()
Dim stSQL As String
stSQL = "SELECT * FROM [クエリ名] WHERE [フィールド名] = '[コンボボックス名]'"
Forms!親フォーム!サブフォーム.Form.RecordSource = stSQL
End Sub
実行すると、エラーこそ起こらないものの、1件も表示されません。
構文としてはsqlに不備があるのかな、と思うのですが、いかがでしょうか・・
どうか、よろしくお願いいたします。
0709デフォルトの名無しさん
2009/09/05(土) 21:17:190710デフォルトの名無しさん
2009/09/05(土) 21:27:160711デフォルトの名無しさん
2009/09/05(土) 21:41:34Access VBA全くやった事無いんで
全く的はずれかもしれないけれど 気になった点を
stSQL = "SELECT * FROM [クエリ名] WHERE [フィールド名] = '[コンボボックス名]'"
をSQL文だけにすると
SELECT * FROM [クエリ名] WHERE [フィールド名] = '[コンボボックス名]'
ってことで
= '[コンボボックス名]'
ってなっているのって正しい構文なの? 例えばコンボボックス名が ComboBox1なら
= 'ComboBox1'
ってことでしょ? なんか 対象フィールドから ComboBox1というワードを検索している
ようにも思えるのですが
0712デフォルトの名無しさん
2009/09/05(土) 22:45:26該当テーブルに「[コンボボックス名]」っていうデータを入れて抽出されるならそういうことなんだろうな
0713デフォルトの名無しさん
2009/09/05(土) 23:16:13[フィールド名] = '[コンボボックス名]'は
[フィールド名] = [コンボボックス名]が正しかったりして
0714デフォルトの名無しさん
2009/09/05(土) 23:54:590715デフォルトの名無しさん
2009/09/06(日) 01:43:00上で指摘されているが、
stSQL = "SELECT * FROM [クエリ名] WHERE [フィールド名] = '[コンボボックス名]'"
これは
stSQL = "SELECT * FROM [クエリ名] WHERE [フィールド名] = '" & Me!コンボボックス名.Value & "'"
こうしなければ求める結果にはならないだろうな。
あとは、サブフォームにSourceObjectが指定されているということはない?
そうであれば、サブフォームの元となるクエリのSQLをDAOで書き換えた後に、
With Me!Forms!親フォーム!サブフォーム.Form
.SourceObject=.SourceObject
End With
こんな感じでセットし直す必要があったはず。
手元にAccessないからうろ覚え
0716デフォルトの名無しさん
2009/09/06(日) 03:51:240717デフォルトの名無しさん
2009/09/06(日) 04:35:57目的は、Excelで株の自動売買システムを作ることです。
環境;WindowsXP、Excel2007
0718デフォルトの名無しさん
2009/09/06(日) 05:09:19素人でもすぐできんじゃない?
0719デフォルトの名無しさん
2009/09/06(日) 07:08:10その手の参考書は最近いろいろ出てきている
0720デフォルトの名無しさん
2009/09/06(日) 07:10:500721デフォルトの名無しさん
2009/09/06(日) 09:55:40それは人それぞれの頭の出来次第だし、頭の出来が一般的以下な君には、
「一般的に何年かかるか」の統計値が有ったとしても何の参考にもならないだろ
> 目的は、Excelで株の自動売買システムを作ることです。
Excelで作るべき物ではないな
0722デフォルトの名無しさん
2009/09/06(日) 10:10:100723デフォルトの名無しさん
2009/09/06(日) 10:11:440724デフォルトの名無しさん
2009/09/06(日) 14:43:440725デフォルトの名無しさん
2009/09/06(日) 16:23:23しかしながら、自分の行う業務がVBAで行えるのか全くわからないので、
こうしたものも行えるのであれば、学びたいと思っています。
いつもの流れ。
エクセルデータをもとに、単純平均・加重平均を求めるのが基本。
ただしその際、
1.すべての項目に回答のないものについては集計対象としないため、除外する。
2.オートフィルタを使い、共通の分類にわけ、同じ作業をする。
3.2の作業をする際はシートを何枚も増やす。
4.上記で求めた値を別のエクセルファイルの様式に落とし込む。
といったものです。
わかりにくくて恐縮なのですが、このような業務はVBAで対応することができるでしょうか?
0726デフォルトの名無しさん
2009/09/06(日) 17:28:52vbaはおまえさんができないことも出来るよ ワラ
0727デフォルトの名無しさん
2009/09/06(日) 18:05:22作業の全貌がよくわからないけど、たぶんできる。
VBAのプログラムを作るのにちょっと手間がかかるだろうけど、
完成すればほぼ一瞬で集計からファイル出力までが終わるようになる。
0728デフォルトの名無しさん
2009/09/06(日) 18:06:42VBAで簡単に出来る。
0729デフォルトの名無しさん
2009/09/06(日) 20:27:450730デフォルトの名無しさん
2009/09/06(日) 20:36:05君のやりたいことはクロス集計だろ?
ピボットテーブル覚えたほうがいいよ。
試しにやってみたけど、
テスト用データの準備に1分ほど、平均求めるのは10秒くらいで完成した。
0731デフォルトの名無しさん
2009/09/06(日) 20:45:190732デフォルトの名無しさん
2009/09/06(日) 21:40:150733デフォルトの名無しさん
2009/09/06(日) 21:45:58無駄な操作多すぎて反省してしまう・・・
0734デフォルトの名無しさん
2009/09/06(日) 23:28:00お答えありがとうございます。
参考になりました。
参考書は今日ポチりました。
0735デフォルトの名無しさん
2009/09/07(月) 08:20:24エクセル自動売買の本だけど
最終的に完全自動売買(PCつけっぱで金が増えるw)まで解説してあると思いきや
実はオフラインのシステム(終値でシグナル出すだけ)を作るトコまでしか解説してなかったりすることがあるので注意
少なくともパンローリングの森田の本はそうだったぜ
なんか騙された感じだった
オレはしゃーないからネットで調べてシコシコ作った
0736デフォルトの名無しさん
2009/09/07(月) 08:29:37ネット通販が主流になりつつあってもやっぱり立ち読みで内容確認って大事だよな
0737デフォルトの名無しさん
2009/09/07(月) 08:30:49100時間もやれば、VBAの基礎はわかると思う。
0738デフォルトの名無しさん
2009/09/07(月) 09:14:19関数の処理内でerrorが発生したかどうか、下のようにErr.Numberプロパティの値を関数の戻り値にしようと思ったのですが、
Function testd(Byval 〜) As ????
testd = Err.Number
End Function
ヘルプを見ても
エラーを指定する数値を設定します。値の取得も可能です。Number プロパティは、
Err オブジェクトの既定プロパティです。値の取得のみ可能です。
とあるだけで、その型は何なのか判りません。longで返せば良いのか、integerなの
かはたまた他の型なのか教えてください。
0739デフォルトの名無しさん
2009/09/07(月) 10:21:55困った時はバリアントで宣言。
んでプレークして型を見ればよい。
0740デフォルトの名無しさん
2009/09/07(月) 10:51:58レス有難うです
それでちょっとやってみます。
0741デフォルトの名無しさん
2009/09/07(月) 10:55:28Err.NumberのNumberにカーソル当てて、Shift+F2、もしくは右クリックして「定義」
Property Number As Long
0742デフォルトの名無しさん
2009/09/07(月) 11:06:31738です。ありがとう!
0743デフォルトの名無しさん
2009/09/08(火) 11:03:15CSVデータは "月","日","お店コード","分類コード","伝票番号","金額"の順にならんでおり、月と日以外は1バイトごとに右詰めでセルに格納したいです
またそれを25行ずつで2列でデータを反映していき、50行を超えたものに関しては新しいシートで同じ様式で繰り返したいのですが、どうやったらできますか?
昨日アマゾンでVBAの本をポチったばっかりで丸投げな質問ですがどうかよろしくお願いします
ここへアップロードした形式で展開したいです、パスはvbaです
http://www1.axfc.net/uploader/Sc/so/34756
0744デフォルトの名無しさん
2009/09/08(火) 11:20:25>>1★5
0745743
2009/09/08(火) 13:19:18外部のファイルを変数に読み込むにはどうしたらよいですか?
0746デフォルトの名無しさん
2009/09/08(火) 15:27:51教えるだけ無駄。
0747デフォルトの名無しさん
2009/09/08(火) 15:43:05株やってるエクセラーは基地外が多い。
顧客にどのような対応してるか心配なやつがいたな。
0748デフォルトの名無しさん
2009/09/08(火) 15:50:58何でですか?
0749デフォルトの名無しさん
2009/09/08(火) 16:35:26ファイルをオープンして、リードして、変数に代入すればよい
0750743
2009/09/08(火) 16:43:57phpとperlとbashは使えるのでそれはわかるんですよ
具体的に関数名を教えてもらえるとありがたいです、もしくは理解しやすいウェブページか関数が網羅された本などあったら教えてもらえると助かる
ここにいるプロの方とは違って独学なんで当たり前の事がわかってないので申し訳ない
0751デフォルトの名無しさん
2009/09/08(火) 16:47:02http://www.bing.com
0752デフォルトの名無しさん
2009/09/08(火) 16:55:310753デフォルトの名無しさん
2009/09/08(火) 16:55:41ttp://www.asahi-net.or.jp/~ef2o-inue/top01.html
俺はここで大体理解できたぞ
0754デフォルトの名無しさん
2009/09/08(火) 18:52:562007から使えなくなってエラーで落ちてしまうらしい。
代わりにDir関数を使おうと思うけど、これなら2007でも平気?
確認できる環境がなくて…。
0755デフォルトの名無しさん
2009/09/08(火) 21:36:060756デフォルトの名無しさん
2009/09/08(火) 21:54:320757デフォルトの名無しさん
2009/09/08(火) 21:55:490758743
2009/09/09(水) 09:04:05ありがとうございます、配列や変数の扱いはなんとなくつかめますね
実務でやりたいことが説明されているページや本がなかなかみつからないので
いまいちなんとなくわかるけど、やりたいことが全然できずに前に進まない感じです
>>751
意味不
0759デフォルトの名無しさん
2009/09/09(水) 11:55:00バカかおまえw
そんなものがピンポイントであるわけないだろw
サイトや書籍は「実務でやりたいこと」を実現するために必要な機能を個々に説明しているもので
「実務でやりたいこと」はそれらを組み合わせて自分で実現するものだ
そもそも、君がやろうとしている程度の低レベルな処理なら、付属ヘルプだけで十二分だろ
必要なのはファイル内容の取得と文字列操作およびセルへの入力くらいで、
あとはそれらを簡単な条件分岐とループで制御すりゃ良いだけの話だし
0760743
2009/09/09(水) 12:39:53そんなつまらん事をわざわざ安価つけて講釈垂れるなよ
まぁphp,perl,bashに関しては俺も上から目線でそう言いたくなる事もあるが
実際にそんな物言いじゃぁ糞の役にもたたん、管理能力やコーチング能力の欠片も見当たらんわな
>あとはそれらを簡単な条件分岐とループで制御すりゃ良いだけの話だし
これは他の言語扱える時点で理解してると言ってるだろ
>必要なのはファイル内容の取得と文字列操作およびセルへの入力くらいで
これがやりたいと具体的に言ってんだから糞みたいなレスつけるまえに少しはためになるレスつけろや、でなきゃレスすんな
0761デフォルトの名無しさん
2009/09/09(水) 12:41:520762デフォルトの名無しさん
2009/09/09(水) 13:00:270763デフォルトの名無しさん
2009/09/09(水) 13:06:120764デフォルトの名無しさん
2009/09/09(水) 13:27:430765デフォルトの名無しさん
2009/09/09(水) 13:41:38さっき本が届いたので独習しますわ。
>>764
まぁなんとでも言って笑ってください。
本業とは別でサイトを複数運営してましてしょぼいプログラムですが月の収入で40万〜50万(経費抜き)程度しか稼げてません。
ここにいるプロの方々には全然及びませんが自分なりに生活には困らないので満足しています。
0766デフォルトの名無しさん
2009/09/09(水) 13:47:21ってかこんな問題に本がいるの???
0767デフォルトの名無しさん
2009/09/09(水) 14:54:360768デフォルトの名無しさん
2009/09/09(水) 14:56:19> これがやりたいと具体的に言ってんだから糞みたいなレスつけるまえに少しはためになるレスつけろや
つまり、
・ファイル内容の取得
・文字列操作(関数)
・セルへの入力
程度のことが、ヘルプで検索できないレベルの頭ってことか?
いやはや、こりゃまいったねw
0769デフォルトの名無しさん
2009/09/09(水) 16:28:25どっちも
0770デフォルトの名無しさん
2009/09/09(水) 17:37:18まったく意味不明な回答よこすやつとヘルプで足りるとか言いはるヘルプ厨しかいねーのなw
0771デフォルトの名無しさん
2009/09/09(水) 17:59:24ここの回答者は質問者にえらそうなんだ。無知のくせにしてな。
ところでCSV読みたいんだっけ?
外部データの取り込みすれば、VBA使わなくても読めるよ。
0772デフォルトの名無しさん
2009/09/09(水) 18:11:560773デフォルトの名無しさん
2009/09/09(水) 20:37:000774デフォルトの名無しさん
2009/09/09(水) 20:43:23パンローリングの森田の本ポチっちゃったよ〜(´;ω;`)
技術評論社のほうが良かったかな〜
0775デフォルトの名無しさん
2009/09/09(水) 20:44:21ありがとう。
0776デフォルトの名無しさん
2009/09/09(水) 20:59:33著作権があるので完全には書けないけど
完全自動売買に関する記述は最後に2ページだけ
ここまでに構築したシステムで売買タイミングを確認できれば
後は証券会社から自動で注文を出すだけでOK
例えばUWSCなんか使ってみれば?
もしくはインタラクティブブローカーはAPI公開してるから自信があるならどうぞ
だってさ
ありえんだろw
取り消し効くなら取り消して立ち読み確認をお奨めする
0777デフォルトの名無しさん
2009/09/09(水) 23:43:58ご親切にありがとうございます。
UWSCも便利そうですね〜
インタラクティブブローカー証券のAPIってなんぼ探してもありませんでした・・・(´;ω;`)
0778デフォルトの名無しさん
2009/09/09(水) 23:45:13別ウィンドウで作業中にワンタッチでActiveworksheetを切り替えたいのですが、
VBAでは無理でしょうか\(^o^)/
0779デフォルトの名無しさん
2009/09/10(木) 05:16:18ExcelのApplication.Onkeyに限らず、ホットキーってのは
そのアプリがアクティブな場合にのみ有効な物
そのアプリが非アクティブな場合にも有効な物は
グローバルホットキーという
グローバルホットキーはWin32APIを使うことで設定できるが
この話は>>1★3-4なので、どうしてもやりたければ自分で調べろ
0780デフォルトの名無しさん
2009/09/11(金) 19:26:44OSはWIN2000でEXCELは2002です。
品目と日付、数量のデータを、オートフィルタを使って日付ごとに
別シートに振り分けをするマクロを組んでみたのですが、
条件の範囲と貼り付けの範囲に変数を利用するとエラーが出てしまいます。
アドバイスをお願いします。
Dim myCnt As Long
myCnt = 1
Do While myCnt < 20
Worksheets("Sheet1").Range("A1:C21").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("Sheet1").Range(Cells(myCnt, 1), Cells(myCnt, 2)).slect, _
CopyToRange:=Worksheets("Sheet2").Range(Cells(myCnt, 3), Cells(myCnt, 3)).slect, _
Unique:=False
myCnt = myCnt + 1
Loop
0781デフォルトの名無しさん
2009/09/11(金) 21:17:260782デフォルトの名無しさん
2009/09/11(金) 21:43:00恥ずかしい限りです……。
訂正しましたが、やはりエラーが出ます。
0783デフォルトの名無しさん
2009/09/11(金) 22:13:060784デフォルトの名無しさん
2009/09/11(金) 22:18:220785デフォルトの名無しさん
2009/09/11(金) 22:20:41どういうデータがあってどうしたいか書いてみろよ。
0786デフォルトの名無しさん
2009/09/11(金) 22:22:02XP,Excel2003です。
マクロセキュリティレベルが中のExcelを使用しています。
Web上のリンクをクリックすると新規ブックが開かれるのでそれを取得して操作をしたいのですが、
セキュリティ警告が表示されたところでマクロの処理が止まってしまいます。
流れとしては
マクロからIEを作成、起動→リンククリック→
ダウンロードダイアログの「開く」をSendMessageでクリック→セキュリティ警告←ここで止まる
って感じです。
説明が下手糞で申し訳ありません。どうにかセキュリティレベルを変更せずに開く方法はありませんでしょうか?
0787デフォルトの名無しさん
2009/09/11(金) 22:23:09Worksheets("Sheet1").Range("A1:C21").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("Sheet1").Range(Cells(myCnt, 1), Cells(myCnt, 2)).slect, _
CopyToRange:=Worksheets("Sheet2").Range(Cells(myCnt, 3), Cells(myCnt, 3)).slect, _
Unique:=False
の部分が黄色に反転
Unique:=False
に矢印付いてます。
「構文エラーです」と出てきます。
.SELECT取ってみましたが、同じエラーが出ます。
0788デフォルトの名無しさん
2009/09/11(金) 22:27:47Excel.Worksheetオブジェクトから、Excel.Workbookオブジェクトを取得できませんかね?
0789デフォルトの名無しさん
2009/09/11(金) 22:29:10Sheet1に、品目・日付・数量の順にひと月分の入荷データ
Sheet2に、上記データを日付ごとに仕分けた表
を作りたいです。
0790デフォルトの名無しさん
2009/09/11(金) 22:46:40同一シート上でテストしてみたらどうだろう
0791デフォルトの名無しさん
2009/09/11(金) 22:48:03Webからマクロ入りエクセルファイル開いてってこと?
http://support.microsoft.com/kb/328588/ja
http://miniminiadmin.jugem.jp/?eid=144
こんなんでた
あとVBAからある程度アプリケーション情報をいじれるから、信頼できるんであれば、開くときだけセキュリティレベル操作するとか方法は知らんけど
>787
つまりユニークデータが問題なんじゃね
0792デフォルトの名無しさん
2009/09/11(金) 22:51:55変数の部分を("A1:A2")のように変えると問題なくマクロが動くんですが
変数を当てはめるとエラーになってしまいます。
0793デフォルトの名無しさん
2009/09/11(金) 22:58:55申し訳ありません。ユニークデータの意味を今一掴めません。
元のデータが、ですか?
0794デフォルトの名無しさん
2009/09/11(金) 23:03:08一度
Range("A" & myCnt, "B" & myCnt)
又は
Range("A" & myCnt & ":B" & myCnt)
とかにしてみたら
0795デフォルトの名無しさん
2009/09/11(金) 23:11:08早速試してみましたが、同じくエラーです。
0796デフォルトの名無しさん
2009/09/11(金) 23:12:57Unionか何かでひとつの範囲指定したら
0797デフォルトの名無しさん
2009/09/11(金) 23:25:00Union(Range(Cells(myCnt, 1), Cells(myCnt, 2)))
こんな感じですか?
0798デフォルトの名無しさん
2009/09/12(土) 00:19:14ヘルプにあるように署名付けるのが正攻法だと思う。
0799デフォルトの名無しさん
2009/09/12(土) 00:19:20変数の部分を("A1:A2")とするとOKなら
ループ文とって下のコードで
構文エラーなら → 原因わからん
実行したなら → フィルタオプションの範囲指定がおかしい
って事ぐらいしか分からん
Dim myCnt As Long
myCnt = 1
Worksheets("Sheet1").Range("A1:C21").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Worksheets("Sheet1").Range("A" & myCnt, "B" & myCnt + 1), _
CopyToRange:=Worksheets("Sheet2").Range("C" & myCnt, "C" & myCnt), _
Unique:=False
0800デフォルトの名無しさん
2009/09/12(土) 00:55:42構文エラー出ました……
0801786
2009/09/12(土) 01:07:42ありがとうございます、週明けに早速試してみます。
理解が悪くて申し訳ないのですが、この方法だと確かに起動元のExcelについでは問題なさそうなのですが、
マクロ上で
IE.Document.forms(0).item("○○").click
で開くファイルに対しても有効なのでしょうか?
0802デフォルトの名無しさん
2009/09/12(土) 09:46:36事前バインドで取得する方法はないと思うが、実行時バインドのParentで出来るんじゃね?
ちなみにRangeオブジェクトからWorksheetオブジェクトを取得するのにParentは馬鹿。
ParentじゃなくWorksheetを使いなさいってこった。
0803デフォルトの名無しさん
2009/09/12(土) 09:55:07何度も書くがフィルタオプションの体をなしてないだろ?
Sheet1のA1:C21をフィルタリングするのに、検索条件範囲がなんで
CriteriaRange:=Worksheets("Sheet1").Range("A" & myCnt).Resize(,2)なんだ?
検索条件範囲って最低2行必要なんだよ。
A1:C21以外のどっか別のセルに検索条件範囲を設けないと。
0804デフォルトの名無しさん
2009/09/12(土) 10:07:39そんなんで分るわけねーだろ。
ちゃんと図で示せ。
0805780
2009/09/12(土) 10:22:55品番 出荷日 数量
A品 9/1 10
B品 9/1 15
C品 9/2 10
D品 9/2 15
E品 9/2 10
F品 9/3 15
G品 9/3 10
sheet2
出荷日 出荷日
9/1 9/2
品番 数量 品番 数量
A品 10 C品 10
B品 15 D品 15
E品 10
大体こんなイメージです
0806デフォルトの名無しさん
2009/09/12(土) 10:24:430807デフォルトの名無しさん
2009/09/12(土) 10:37:080808デフォルトの名無しさん
2009/09/12(土) 11:48:00俺も出力イメージを変えてピボットテーブルが妥当だと思うな。
どうしても>>805のsheet2のようなイメージでフィルタオプションを使いたければ
sheet2の頭3行がすでに書かれているという条件なら下になる。
>>780はCellsの使い方がめちゃくちゃだ。
Cellsにもちゃんとシートを指定しなきゃいかんし、行番号と列番号も逆っぽいな。
Sub hage()
Dim myCnt As Long
myCnt = 1
With Worksheets("sheet2")
Do While myCnt < 20 '40かも知らん(20とか40等のリテラル値は使っちゃいかんが)
Worksheets("Sheet1").Range("A1:C21").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range(.Cells(1, myCnt), Cells(2, myCnt)), _
CopyToRange:=.Range(.Cells(3, myCnt), .Cells(3, myCnt + 1)), _
Unique:=False
myCnt = myCnt + 2
Loop
End With
End Sub
0809デフォルトの名無しさん
2009/09/12(土) 11:50:09Sub hage2()
Dim r1 As Range
Dim r2 As Range
Dim i As Long
Set r1 = Worksheets("Sheet1").Range("A1").CurrentRegion
Set r2 = Worksheets("Sheet2").Range("A1").CurrentRegion
For i = 1 To r2.Columns.Count Step 2
r1.AdvancedFilter , Action:=xlFilterCopy, _
CriteriaRange:=r2.Item(1, i).Resize(2), _
CopyToRange:=r2.Item(3, i).Resize(, 2), _
Unique:=False
Next
End Sub
0810デフォルトの名無しさん
2009/09/12(土) 13:31:50配列に流し込めと何度
0811デフォルトの名無しさん
2009/09/12(土) 13:39:530812デフォルトの名無しさん
2009/09/12(土) 13:50:07配列なんか使う場面じゃない。
0813デフォルトの名無しさん
2009/09/12(土) 14:04:48データの整形を視覚的に行う方法であって、データの抽出方法ではないだろ
0814デフォルトの名無しさん
2009/09/12(土) 15:07:420815デフォルトの名無しさん
2009/09/12(土) 15:19:51データ整形ならクエリ抽出としたもんだが
0816デフォルトの名無しさん
2009/09/12(土) 17:34:55AutFilterとAdvancedFilterの区別もつかないらしいから。
0817デフォルトの名無しさん
2009/09/12(土) 17:35:410818デフォルトの名無しさん
2009/09/12(土) 18:47:27やってることはデータの抽出→転写で、確かにフィルタ機能は強力なんだけど、
DBSとして考えるなら拡張性や保守性を考えなくてはいけないし、
そもそもデータソースシートに手を加えかねない手法は自重すべき
クライアントからすれば動けばいいんだし、作りたい本人がフィルタ使いたいっていうんだから別にいいんだけど
私14歳の女子中学生だけどそうおもう
0819デフォルトの名無しさん
2009/09/12(土) 19:14:000820デフォルトの名無しさん
2009/09/12(土) 19:24:39結局、何が問題だったの?
解決したん?
0821デフォルトの名無しさん
2009/09/12(土) 19:27:59>>815
AdvancedFilterのAction:=xlFilterCopyの場合は非該当セルの「非表示」じゃなくて、いきなり「抽出」。
非該当セルの「非表示」はAction:=xlFilterInPlaceね。
0822デフォルトの名無しさん
2009/09/12(土) 19:51:33うん、それはわかる
わかるんだけど、フィルタ機能でデータ成形するのが納得いかないっていうだけだっていう
Vlookupを使いたがらないのと同じようなものなだけ
0823780
2009/09/12(土) 20:46:42>>805の形に最終的に持っていきたいので手法は特にこだわりません。
これまでもたくさんの助言を賜りとてもありがたいです。
申し訳ありませんが、もう少しアドバイスをお願いいたします。
0824デフォルトの名無しさん
2009/09/12(土) 21:10:42ところでピボットテーブルを使わないのはなんで?
0825sage
2009/09/12(土) 21:16:17A1〜A10までのセルにおいて、何も記入がないセルの隣に”×”を打ちたい
のですが、エラーが出てしまします。助けてください。
Sub
Dim i As Integer
For i = 1 To 10 Step 1
If Cells(i,1).Value=""Then
Cells(i,2).Value="×"
End If
Next i
End Sub
0826825
2009/09/12(土) 21:28:36エディターではエラーがでてたのに。。
よくわかりませんが解決しました
0827デフォルトの名無しさん
2009/09/12(土) 22:15:14/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0828デフォルトの名無しさん
2009/09/12(土) 22:56:20変なのに絡まれて大変だが、行き詰るはずはないだろうよ。
>>805のようにSheet2の頭3行が書き出してあれば>>809で出来るだろ?
元のコード見ても検索条件範囲にセットする記述は見えないから、検索条件範囲はすでにセットしてあるはずだからね。
どうしても出来なければ>>805の形にこだわらないでピボットの形にするんだな。
超簡単だから。
今日はCellsの使い方をとりあえず覚えりゃいいんじゃね?
まるでなってないから。
0829デフォルトの名無しさん
2009/09/12(土) 22:58:40恥ずかしながら不慣れなものなので
提案していただいたものを試している最中です。
ピボットテーブルは初めてなので、調べながら色々と試している所です。
0830デフォルトの名無しさん
2009/09/12(土) 23:12:19VBAなんぞ所詮バッドノウハウ。
まずはピボットテーブルを使いこなしなさい。
0831デフォルトの名無しさん
2009/09/12(土) 23:13:10最初の行はSubだけで動く?
0832デフォルトの名無しさん
2009/09/13(日) 01:10:21Excel2007
Sub だけでEnter押したらコンパイルエラーが即行で出たけど w
825の書き漏れでしょ?
0833780
2009/09/13(日) 14:54:03どうも日付ごとに一覧にして印刷したいそうなので却下されてしまいました。
提案していただいた方々には大変申し訳ないです。ですがとても勉強になりました。
>>808-9の方のコードを使わせて頂いておりますが、エラーが出てしまう状態です。
最初のSubの所に黄色い矢印が来ています。
申し訳ありませんがもう少しだけお力をお貸し下さい。
0834デフォルトの名無しさん
2009/09/13(日) 16:30:30「頭が悪いんで出来ません」とでも言っとけ。
0835デフォルトの名無しさん
2009/09/13(日) 16:42:420836デフォルトの名無しさん
2009/09/13(日) 16:53:490837デフォルトの名無しさん
2009/09/13(日) 17:28:44まったくその通り。
ピボット使わない理由をどんなに探しても無理がある。できるんだからな。
>>833
ピボットは嫌いなんだと正直に言えばいいのに。
0838デフォルトの名無しさん
2009/09/13(日) 20:43:46得られた結果などをセルに入力、というようなIEを制御するやり方が
分かりやすく載っているサイト教えてください。
0839デフォルトの名無しさん
2009/09/13(日) 20:51:330840デフォルトの名無しさん
2009/09/13(日) 20:58:35うん。だから嫌いなんだろ?それでいいじゃない。
0841デフォルトの名無しさん
2009/09/13(日) 21:18:37質問者の要望に答えられれば答えるのが理想
0842デフォルトの名無しさん
2009/09/13(日) 21:28:17教えてください
ExcelにA列にコピー元ディレクトリ+ファイル
ExcelにB列にコピー先ディレクトリ
が複数行ある場合
これを全ての行でA列のファイルをB列にコピーしたい場合
どう書けばいいのかわかりません。
コピーはfilecopyってのはわかるのですが
存在する行だけを選択するというのがわかりません
教えてください
0843デフォルトの名無しさん
2009/09/13(日) 21:43:36usedrangeまたはxldown/xlup
0844デフォルトの名無しさん
2009/09/13(日) 21:48:55スレタイ読める? 頭大丈夫かな・・・(`・ω・´)
0845デフォルトの名無しさん
2009/09/13(日) 21:54:180846デフォルトの名無しさん
2009/09/13(日) 22:12:440847デフォルトの名無しさん
2009/09/13(日) 22:21:050848デフォルトの名無しさん
2009/09/13(日) 22:28:510849デフォルトの名無しさん
2009/09/13(日) 22:28:56私が書いたのは>>837と>>840。
いちおうこっちはVBAのスレなのでVBA使うことについてはとやかく言うつもりは無い。
0851780
2009/09/14(月) 19:01:08一応解決いたしました。
アドバイスを下さって本当にありがとうございました。
0852デフォルトの名無しさん
2009/09/15(火) 10:59:16環境:Windowsxp * Excel2003
[質問]
終了時に、Excelで終了したか、ブックを閉じたかを判別する方法はありますか?
Workbook_BeforeCloseイベントでは、どちらも上がってしまいます。
[理由]
一つのブックから他のブックを開いて参照や登録などを処理をし、メインとなるブックを閉じた時に
もう片方も閉じるようにしたいのですが、ブックを閉じた場合は、問題なく終了するのですが、
Excelを閉じた場合、エラーが発生してしまいます。
ObjectはNothingになっていませんが、閉じたいブックが恐らく先に閉じられてしまっているからだと思います。
[制限]
閉じられる側のブックは、自作ではなく、かつパスワードが設定されている為修正は出来ません。
0853デフォルトの名無しさん
2009/09/15(火) 11:29:48どうやって閉じたか調べるにはWin32APIを使うしかない
かなりめんどくさいからOn Errorでエラー処理しとけ
VBAのパスワードは誰にでもk
0854852
2009/09/15(火) 14:29:33どうもです。
Win32APIのやり方がわからなかったですが、クラスを作り、Applicationのオブジェクトから
Workbook_BeforeCloseイベントを追加すれば、引数でどのブックが閉じられたかを判別できました。
今回はこれで回避できそうです。
0855デフォルトの名無しさん
2009/09/15(火) 15:01:310856デフォルトの名無しさん
2009/09/15(火) 21:19:010857デフォルトの名無しさん
2009/09/16(水) 00:54:170858デフォルトの名無しさん
2009/09/16(水) 13:25:490859デフォルトの名無しさん
2009/09/16(水) 16:22:21Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Me.Range("e13") < Me.Range("k13") Then
Me.Range("a1") = 0
End If
If Me.Range("e13") < Me.Range("k13") Then
Me.Range("a2") = 0
End If
End Sub
k13の値がe13の値より大きかったらa1とa2に0を入れるというプログラムを組んだのですが
実行すると延々ループするかのようにフリーズして何も入力を受け付けなくなります。
上の記述でおかしな所を教えてもらえないでしょうか?
なにとぞお願いします。
0860デフォルトの名無しさん
2009/09/16(水) 16:42:37どうやって閉じたか調べるにはAPIでしかできない事実は変わってないよ。
API使わない代替手法でも、最終的に目的を達成することは可能だったというだけの話で。
>>859
セルへの値の代入、すなわち「Me.Range("a1") = 0」に因って
Worksheet_Changeイベントが発生する、
Worksheet_Changeでセルへの値の代入が行われる、
セルへの値の代入に因ってWorksheet_Changeイベントが発生する、
という状態になってる。
Worksheet_Changeイベントでセルの値を書き換えるなど、
イベントプロシージャ内でイベントを起こすような処理をする場合は
Application.EnableEvents = False
'処理
Application.EnableEvents = True
とすべし。もちろん、再帰的に処理をさせることが目的の場合は話は別だがな。
0861デフォルトの名無しさん
2009/09/16(水) 16:48:36なるほど、早速のご回答ありがとうございます。
修正してみます。
0862デフォルトの名無しさん
2009/09/16(水) 23:04:55下みたいにIFブロックの中にも沢山記述できるんだぜ
豆な
If Me.Range("e13") < Me.Range("k13") Then
Me.Range("a1") = 0
Me.Range("a2") = 0
End If
0863デフォルトの名無しさん
2009/09/16(水) 23:06:49シート名に1 2 3 ・・ みたいな連番をつけるように
したいのですが、どうもうまくできません。コードはぐぐって色々な所から切り張りして
作ったのですが、
Worksheets("Sheet3")) ここのSheet3を指定してる意味もよくわからず
Sheet3を削除するとうまく動かなくなったりします。
Sub ワークシート追加()
Dim hoge As Worksheet
For i = 1 To 30
Set hoge = Worksheets.Add(After:=Worksheets("Sheet3"))
hoge.Name = "1"+1
Next
End Sub
0864デフォルトの名無しさん
2009/09/16(水) 23:16:11このマクロは、もともとSheet1、2、3があるところで
Sheet3の後ろに新規にシート名が1 2 3 ・・・ のシートを追加するってこと
もともとあるシートは設定によって変わるし Sheet3 が無いと動かない
これを解消して汎用性をあげるには今のブックのシートコレクションを取得してやればよい
0865デフォルトの名無しさん
2009/09/16(水) 23:52:34ほい。
Sub ワークシート追加()
For i = 1 To 30
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = i
Next
End Sub
0866デフォルトの名無しさん
2009/09/17(木) 00:06:200867デフォルトの名無しさん
2009/09/17(木) 00:14:06基礎だけなら3日もあれば十分
応用は分野によって果てしないから何年かかってもゴールは見えない
0868デフォルトの名無しさん
2009/09/17(木) 08:18:49大変勉強になります。有難うございます。ペコ。
0869デフォルトの名無しさん
2009/09/17(木) 11:10:220870デフォルトの名無しさん
2009/09/17(木) 12:19:410871デフォルトの名無しさん
2009/09/17(木) 14:06:100872デフォルトの名無しさん
2009/09/17(木) 14:32:41正確には関数じゃなくて演算子だが。
0873デフォルトの名無しさん
2009/09/17(木) 15:38:03- マイナス演算子
111302749 - 111000000
いろいろ方法があるねw
0874デフォルトの名無しさん
2009/09/17(木) 20:43:480875デフォルトの名無しさん
2009/09/17(木) 21:15:250876デフォルトの名無しさん
2009/09/17(木) 21:18:54夫のエロを暴きたいのですが…
詳細もうpします
0877デフォルトの名無しさん
2009/09/17(木) 21:28:59excel上でctrl+Kです
0878デフォルトの名無しさん
2009/09/17(木) 21:29:22数値で下6桁なら111302749 Mod 1000000だろうし、数字(文字)で4文字目以降ならMid$("111302749",4)だろうね。
まぁ文字だと思うけど。
0879デフォルトの名無しさん
2009/09/17(木) 21:30:36普通にフォルダ開くのも変わらない気がするけど
0880デフォルトの名無しさん
2009/09/17(木) 21:31:55進展があったらまた報告しにいます
夫婦関係\(^O^)/オワタ
0881デフォルトの名無しさん
2009/09/17(木) 21:45:440882デフォルトの名無しさん
2009/09/17(木) 21:49:090883デフォルトの名無しさん
2009/09/17(木) 22:10:22それを締め付けるとリアルで動くだろうよ。
0884デフォルトの名無しさん
2009/09/17(木) 22:45:390885デフォルトの名無しさん
2009/09/18(金) 00:15:030886デフォルトの名無しさん
2009/09/18(金) 07:55:38手軽に結構いろんなコトできて確かに最強かもしれないが
速度や複雑な処理を求めると、正規表現じゃ手に負えない。
特に、鬼車のdllをDeclareするならまだしも、一般的にVBAで使われる
VBScript.RegExpはあまり強力なライブラリじゃないからな。
0887869
2009/09/18(金) 11:18:33mid(string,4,6)で無事解決しました、ありがとうございました。
0888デフォルトの名無しさん
2009/09/18(金) 11:39:374文字目以降ならワークシート関数のMIDは第3引数も必須だがVBA.StringsのMidは第3引数を省略出来るから便利だよ。
ワークシート関数なら=MID(文字列,4,LEN(文字列)-3)としなきゃならんが、VBAならMid$(文字列,4)でok
0889デフォルトの名無しさん
2009/09/18(金) 19:30:371年前に自分が1日かけてやっていた集計の仕事がボタン1つで誰にでも10分で出来るようになりました。
今、不景気で自分を含めて事務員2人の職がなくなりました。
他の事務員には恨まれていることでしょう。
あなたにとってVBAってなんですか?と言ってみるテスト
0890デフォルトの名無しさん
2009/09/18(金) 19:44:25自分も含めてってのがすごいなw
言ってることはわかるけど、自分がやらなくてもどうせ誰かやる
0891デフォルトの名無しさん
2009/09/18(金) 19:51:48会社の為に何かを成し遂げても報われるわけじゃないが、少なくとも道具を使いこなす訓練にはなったはず。
そうやって身に着けたVBAのスキルを今度は自分の為だけに使えばいいのさ。
為替のデータ取りに使ってもいいし、教室開いて教える仕事をしてもいい。
0892デフォルトの名無しさん
2009/09/18(金) 20:12:140893デフォルトの名無しさん
2009/09/18(金) 20:39:310894デフォルトの名無しさん
2009/09/18(金) 21:11:030895デフォルトの名無しさん
2009/09/18(金) 21:32:45そういう時のために、マニュアルは残さないようにしないとね
0896デフォルトの名無しさん
2009/09/18(金) 21:36:49引き継ぎもできないから、クビにされて当然
0897デフォルトの名無しさん
2009/09/18(金) 21:59:22再就職するならクビにされにくい職種を選ぶべき。
0898IE捜査
2009/09/18(金) 22:01:03線路距離と伝送損失の値をその任意の番号の右のセルに返すという事がしたいのですが、
VBAのIE操作関係が全く分からず、3流君なども参照したのですが、サイト上(恐らくJavascript)の
値をエクセルシートへ返すという事が記載がなく、困っています。
どなたかご教授いただけませんでしょうか?
私なりに調べ、勉強しましたが、IE操作だけが本当に理解できません。
助けてください、よろしくお願いいたします。
0899デフォルトの名無しさん
2009/09/18(金) 22:41:500900デフォルトの名無しさん
2009/09/18(金) 22:42:02ブロードバンド難民はつらいな。
0901デフォルトの名無しさん
2009/09/18(金) 23:46:52ObIE ??
0902デフォルトの名無しさん
2009/09/19(土) 01:12:16IEオブジェクトでどこまでできてるの?
全くわからずって何もできないの?
基本的にはパラメータセットして、命令出すだけのお手軽仕様のはずだけど
0903デフォルトの名無しさん
2009/09/19(土) 01:29:14役に立つか分かりませんが、
手動で書いてみました。
https://lios-web.nttwest-info.jp/LiosApp1/LoginPub
にIEでアクセス
javascript:document.getElementsByTagName("INPUT")[0].click();
でログイン
javascript:void(frames[0].document.getElementById("view_line_info").phone_no.value="0123456789");
で電話番号入力
javascript:frames[0].document.getElementById("view_line_info").exec.click();
によって実行ボタンがクリックされ
右側のフレームに結果が表示されます。
後は、
frames[1].document.body.innerHTML
からデータを上手く取り出して
セルに書き出せばOKと思われます。
0904デフォルトの名無しさん
2009/09/20(日) 16:35:29t = "cmd /k cd d/ D:"
t2 = "cmd /k cd d/ D:/aaa"
Shell t
Shell t2
End Sub
とやるとコマンドプロンプトの画面が二個出て来てしまいますがこれを同じウィンドウ
(一個目のと同じウィンドウ)で二個目のを実行するにはどうすればいいですか?
0905デフォルトの名無しさん
2009/09/20(日) 18:23:14書き込み見て作って見たけど、データ入力→開示情報表示までは出来た。
ただ、きちんとフレームで表示されず、開示情報がポップアップ表示される状態…。若干、試行錯誤中。
特定のウィンドウを参照するにはhwndかAPI使わないと出来ませんか?
Internet Controlよく分からん…
0906デフォルトの名無しさん
2009/09/20(日) 20:18:04AllocConsole
Shell t
Shell t2
0907デフォルトの名無しさん
2009/09/21(月) 00:44:11Do until loop関数で抽出した数字をグラフにするためセル範囲にしたいんですけど、
実行時エラー'1004'('cells'メソッドは失敗しました'_Global'オブジェクト)
と出ました。
Dim X, Y, i, j As Integer と宣言して、
i,jで行数をカウントした数字を i→X、j→Y と代入してセル番地にし、
例えばB5からC50の範囲、Range("B5:C50")となるところを
Range("B(X):B(Y)")とはできませんか?
または
cells(cells(X,2),cells(Y,3))とか、、、
大体できたけど、この構文でエラーになります。
ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(X), Cells(Y)), PlotBy:=xlColumns
説明が難しいですね、伝わるだろうか??
0908デフォルトの名無しさん
2009/09/21(月) 01:23:17Range("B" & X & ":B" & Y)
0909デフォルトの名無しさん
2009/09/21(月) 01:52:33できた!ありがとう!!
完成しました。
いろいろググってみてよく分からなかったのでこの方法覚えますっ
0910デフォルトの名無しさん
2009/09/21(月) 02:25:520911デフォルトの名無しさん
2009/09/21(月) 17:17:27> ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(X), Cells(Y)), PlotBy:=xlColumns
↑ ↑
Cells(X) じゃなくて Cells(X, 2) じゃないの?
0912デフォルトの名無しさん
2009/09/21(月) 17:34:08例えば、Application.GetOpenFilenameでA1234.xlsというファイル名を取得した後で、
その文字列を使ってA1234という文字列を取得するにはどうしたらよいでしょうか。
0913907
2009/09/21(月) 17:47:38それが、エラーになったんでス('_';A
>>911
すみません、入れ忘れです(^^;A
もちろんちゃんと
Range(Cells(X,2), Cells(Y,3)),
と入れてましたが、エラーとなってお手上げで質問したところ、
>>908さんの
Range("B" & X & ":B" & Y)で正常に動いてくれました。
この方法知らなかったので、マジ感謝ですm(_ _)m
0914デフォルトの名無しさん
2009/09/21(月) 17:53:13Left
0915デフォルトの名無しさん
2009/09/21(月) 18:29:240916912
2009/09/21(月) 22:06:20できました!
ありがとうございました。
0917デフォルトの名無しさん
2009/09/21(月) 22:15:13あのね、Cellsを使うときはRangeだけじゃなくCellsにもシートを指定しなきゃいけないんだよ。
ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Sheets("sheet1").Cells(X ,2), Sheets("sheet1").Cells(Y ,3)), PlotBy:=xlColumns
ってな具合だ。
Withを使うと簡単になるけどな。
0918デフォルトの名無しさん
2009/09/21(月) 22:18:21とか注意書きがある糞マクロを思い出した
0919デフォルトの名無しさん
2009/09/22(火) 07:27:12そんなやついるのかよw
0920デフォルトの名無しさん
2009/09/22(火) 10:31:23とか使うから他のブックがあるとうまく動きません
0921デフォルトの名無しさん
2009/09/22(火) 10:45:30というかそういう制御無しに関数やメソッドを列挙していくだけなら
機械でも出来る(マクロの記録)ことで、条件分岐やエラー処理
ループや再帰などの制御が正しくできて、初めてVBAが多少は使えると言える。
つまり「このマクロは他のブックを開いてるとうまく動きません」なものを作る奴は
VBAのコードを書いていても、VBAが使えるとは言えない。
0922デフォルトの名無しさん
2009/09/22(火) 11:07:45勝手に断定
自分の考えの押し付け
あなたのコードはさぞや堅牢なんでしょう
自分で作って使うような仕事にVBA使ってるヤツは分かると思うけど
作業全体を最適化する為にコーディングで手を抜くなんてことは良くあること
過度の作りこみは時間の無駄
ケース・バイ・ケースと思うけどね
0923デフォルトの名無しさん
2009/09/22(火) 11:34:37>>907みたいなやつとか。
0924デフォルトの名無しさん
2009/09/22(火) 11:59:34俺は921じゃないけど、自分だけで使う物は手を抜いてもいいと思う。
ただ、他の人が使う場合は手抜きしては駄目だと思う。ただの迷惑プログラム。
0925デフォルトの名無しさん
2009/09/22(火) 12:36:06このプログラムをちょっと改善してほしい
↓
制作者のあいつが大嫌いだから話しかけたくない
↓
仕方ない自分でやるか
ってな経緯でVBAを勉強し始めた俺がいるから
手抜きも悪くないと思う、シェアウェアならもちろん話は別だが
雑談すまん
0926デフォルトの名無しさん
2009/09/22(火) 12:39:26くどいコードは嫌われる。
0927907
2009/09/22(火) 22:41:21そうか〜ひとつひとつのセルにシートを指定しないと駄目だったのかぁ。
ひとつまた勉強になりました。
教えてもらってばかりです。もっと頑張らねば・・・('_';A
0928デフォルトの名無しさん
2009/09/22(火) 23:03:17手抜きの善悪ではなく、手抜きしたものしか作れない奴は
VBA使えるとは言えないってだけの話だろ?
0929デフォルトの名無しさん
2009/09/22(火) 23:15:55その後違うブックを開いた後にaaaを使用すると最初に開いた方と後に開いた方のどちらのブック名が格納されていますか?
0930デフォルトの名無しさん
2009/09/22(火) 23:34:07その質問みて試しにやってみようと思って
思いとどまった
自分で試せよ
0931デフォルトの名無しさん
2009/09/22(火) 23:36:19試す必要なく最初のブック名か格納されてるだろ
0932デフォルトの名無しさん
2009/09/22(火) 23:40:21すいません確かに自分で試せば済む話なんですが変数の仕組みがいまいちよく分からないので質問させてください。
aaa=thisworkbook.nameあるいはactiveworkbook.nameを設定したとして、このブック名が取得されるのは
その変数の設定をした時点なのか、その変数がコードの中で出てきた時なのかどちらでしょうか?
0934デフォルトの名無しさん
2009/09/22(火) 23:46:00代入し直さなければ保持してるでしょ
0935デフォルトの名無しさん
2009/09/22(火) 23:47:58代入した時点なんですね。理解できましたありがとうございます
0936デフォルトの名無しさん
2009/09/23(水) 00:07:46例えば、
Sub test()
Dim i As Integer
Dim j As Integer
i = 1
j = 1
Do While i < 5
Do While j < 10
Cells(i, j).Value = i + j
j = j + 1
Loop
i = i + 1
Loop
End Sub
これは5行×10列の範囲に数字が入ると予想したのですが、
実行するとiのループが機能せず、一行目にしか数字が入りません。
どうしたらiのループも機能するでしょうか。
0937デフォルトの名無しさん
2009/09/23(水) 00:16:23内側のループからでた時にjを初期化
0938デフォルトの名無しさん
2009/09/23(水) 01:49:19違う
>>936
内側のループに入る前にjを初期化
i = 1
Do While i < 5
j = 1
Do While j < 10
Cells(i, j).Value = i + j
j = j + 1
Loop
i = i + 1
Loop
0939デフォルトの名無しさん
2009/09/23(水) 07:09:39なるほど、確かに。
全然気づきませんでした。
ありがとうございました!
0940デフォルトの名無しさん
2009/09/23(水) 09:52:260941デフォルトの名無しさん
2009/09/23(水) 12:03:03何かあるんだろうから
0942デフォルトの名無しさん
2009/09/23(水) 15:02:280943デフォルトの名無しさん
2009/09/23(水) 17:57:01VBAで画像をファイル名順でワークシートへ貼り付けたいんですが、
その時、
画像をワークシートには保存せず、
ワークシートには画像へのリンクのみ保存、
リンクは相対パスで設定、ということはできないでしょうか?
「リンクのみ保存」はActiveSheet.Shapes.AddPictureでできましたが、
リンクは絶対パスになってしまいました。
0944デフォルトの名無しさん
2009/09/23(水) 18:11:000945デフォルトの名無しさん
2009/09/23(水) 18:35:34AddPictureに相対パスを指定するとエラーが出たんで
絶対パスは使えないのかと思ったんですが
別の原因でエラーが出ていただけでした。
AddPictureに相対パスを指定すれば希望の動作になりそうです。
0946デフォルトの名無しさん
2009/09/23(水) 22:35:53開いてあるブックAから開いてあるブックBの操作に関しての質問です。
ブックAでは以下の操作を行います。
・ブックBのオブジェクトを取得
・ブックBのセルに値を入れる(ブックB.ActiveSheet.cells(○,○).value・・・
・ブックBのメソッドを呼び出す(ブックB.ActiveSheet.メソッド名
という流れなのですが、現状ブックBの対象メソッドの処理終了後に「○○しました。」と
メッセージが表示される仕様になっています。
皆さんにお聞きしたいのは、ブックA側から表示されたメッセージを感知してOKボタンを押すまたはダイアログそのものを無効にする、
といった方法があれば教えて頂きたく質問させて頂きました。
現状ではブックBのメソッドを呼び出す直前に外部のVBScriptを起動して、
sleep 5000
sendkeys エンター
という形で処理していますが、これではメソッド内の処理が終了前にSendkeysが作動してしまう場合があり上手く処理ができません。
説明が分かりづらくて申し訳ありません。何かよいやり方がありましたらご教授いただければ幸いです。
0947デフォルトの名無しさん
2009/09/23(水) 22:48:012.メソッド終了時にAの処理にフォーカスを渡す
0948デフォルトの名無しさん
2009/09/23(水) 23:19:56外のオブジェクトだとApplication.DisplayAlertsって効かないかな。
AからBを呼び出してBのOK待ちでコードが停まってる状態だから
イベントを事前に仕込んで置くか、外部の監視プログラムを走らせるしかないと思う。
ブックBをいじって仕様変更が一番だけど無理なのかな。
0949デフォルトの名無しさん
2009/09/23(水) 23:43:48早速の返答ありがとうございます。
948の仰っている通りBのOK待ちでコードが止まっている状態なの難しそうです、申し訳ありません。
>>948
>イベントを事前に仕込んで置くか、
これは事前にApplication.OnTimeでメソッドを予約しておくということでしょうか?
>ブックBをいじって仕様変更が一番だけど無理なのかな。
これができれば一番よいのですが・・・現在では無理のようです。
0950デフォルトの名無しさん
2009/09/24(木) 01:53:48ブックBにはパスでも掛かってるの?
VBAのパスは簡単に(ry
ブックBで外部DLLをコールして、そこでメッセージボックス出されると無理だけど
ブックB起動前に外部プログラムを走らせて監視させるのが良い気がする
0951デフォルトの名無しさん
2009/09/24(木) 23:27:19返事が遅れまして申し訳ありません。
結局起動前にVBSを起動して監視するようにしました。どうにか動きそうです。
スレの皆様にはお世話になりました。ありがとうございます。
0952デフォルトの名無しさん
2009/09/26(土) 19:25:49Range("A65536").End(xlUp).Row
がいちばんいいのかね。なんとなく65536がイヤなんだが。
0953デフォルトの名無しさん
2009/09/26(土) 19:33:12Range("A" & Rows.Count)
0954デフォルトの名無しさん
2009/09/26(土) 19:42:39アナルほど。これでいきます。ありがとう。
0955デフォルトの名無しさん
2009/09/26(土) 21:59:370956デフォルトの名無しさん
2009/09/26(土) 22:18:250957デフォルトの名無しさん
2009/09/26(土) 22:19:260958デフォルトの名無しさん
2009/09/27(日) 05:03:02usedrangeはいけるよねえ
0959デフォルトの名無しさん
2009/09/27(日) 06:11:39それは
Range("A1").End(xlDown).Row
で上からチェックした場合
UsedRangeだと他の列の影響を受けるからだめ
0960デフォルトの名無しさん
2009/09/27(日) 09:15:340961デフォルトの名無しさん
2009/09/27(日) 11:00:330962デフォルトの名無しさん
2009/09/27(日) 11:19:17構造的に扱うことになってるから、リストの最終行をどう取得するかが問題になる
なんてことはまったくない。まあ、せいぜい苦労してくれw
0963デフォルトの名無しさん
2009/09/27(日) 16:56:38配列の複写?で質問させてください。
FileSearchでフォルダ内の対象ファイルを昇順で配列に格納したいのですが
「引数の数が一致していません。または不正なプロパティを指定しています」
となり複写できません。
これは単に.FoundFilesは配列ではないという認識で良いのでしょうか?
またこの場合、For〜Nextで一つづつコピーするのが普通でしょうか?
よろしくお願いします。
Sub S_FileSearch(ByRef myFoundFiles As Variant, ByRef myFilePath As String)
Dim myFSO As FileSearch
Dim i As Long
Set myFSO = Application.FileSearch
With myFSO
.LookIn = myFilePath
.Filename = "*.*"
If .Execute(SortBy:=msoSortByFileName,sortorder:=msoSortOrderAscending) > 0 Then
ReDim myFoundFiles(.FoundFiles.Count)
myFoundFiles = .FoundFiles '←ここでエラー
' For i = 1 To .FoundFiles.Count '←これならOK
' myFoundFiles(i) = .FoundFiles(i)
' Next i
End If
End With
End Sub
0964963
2009/09/27(日) 16:58:440965デフォルトの名無しさん
2009/09/27(日) 18:39:110966デフォルトの名無しさん
2009/09/28(月) 08:25:48マクロでワークシートの中のA4セルの数字が変更されたら
グラフの上限をI6、下限をI7に変えてほしいのです。
以下のように入力しても機能しません。
どうしたらよいのでしょうか?
Sub Macro1()
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$4" Then
ActiveSheet.ChartObjects("グラフ 3").Activate
ActiveChart.Axes(xlValue).MinimumScale = Range("I7")
ActiveChart.Axes(xlValue).MaximumScale = Range("I6")
End If
End Sub
0967デフォルトの名無しさん
2009/09/28(月) 09:24:42そのコードでうまく動いたよ。
グラフ1に訂正はしたけれども。Excel2003ね。
0968966
2009/09/28(月) 09:36:09コードが正しいのなら
何か根本的なことを間違えているということでしょうか。
0969966
2009/09/28(月) 10:11:46コードは通常のモジュールに書いても意味がないとか…
0970デフォルトの名無しさん
2009/09/28(月) 10:15:140971デフォルトの名無しさん
2009/09/28(月) 13:28:03それコンパイルエラーにならない?
それとも「Sub Macro1()」はコピペミス?
0972デフォルトの名無しさん
2009/09/28(月) 20:31:38>>コードは通常のモジュールに書いても意味がないとか…
標準モジュールに書いてる?
該当シートのモジュールへ書かないと実行されないよ
0973デフォルトの名無しさん
2009/09/28(月) 20:32:36モジュールじゃなくてシートの方に書く
0974966
2009/09/29(火) 07:24:30みなさんありがとうございます。
0975デフォルトの名無しさん
2009/09/29(火) 15:25:53別のブックでデータを抽出(indirect等の関数で)しています。
(商品の値段をデータベース、そこから商品の値段を抽出して見積もり書を作成)
現状データベースの数が多くなり、立ち上げるだけで重くなっています。
Accessへの移行も検討していますが、面倒なので質問です。
データベースのブックを開かずに、関数のようにVBAでデータを抽出できますか??
開かずに特定のセルを読み込みができるのは知っていますが。。。。
0976デフォルトの名無しさん
2009/09/29(火) 15:46:56メンテナンスとか死ぬほど大変だろ。
こういうのを見ると正規化って大事なんだと思わされる。
VBAで他Excelファイルを開かずに、の意味が厳密にはわからんがado使ってbook名と検索条件を引数にすればいいんじゃない?
0977デフォルトの名無しさん
2009/09/29(火) 16:50:080978デフォルトの名無しさん
2009/09/29(火) 17:31:21ADO
0979デフォルトの名無しさん
2009/09/29(火) 18:00:28この場合の正規化って、Accessでしょうか?
0980デフォルトの名無しさん
2009/09/29(火) 18:10:04どうせExcelには無縁の話だよ。
0981デフォルトの名無しさん
2009/09/29(火) 18:47:05FileMaker
0982デフォルトの名無しさん
2009/09/29(火) 19:01:26>>978
ありがとん。
ちょっと勉強してみる。
最初はデータ数が少なくてエクセルで十分だったんだけど、
追加、追加でデータ量が増えちゃったって感じかなぁw
あとはエクセルで作った方が後々都合がいいってのもあるんだけどね。
ちょっと特殊な業界なんで詳しくは言えないですが。
エクセルデータベース→ADO→エクセル って感じですかねぇ。
0983デフォルトの名無しさん
2009/09/29(火) 19:44:39追加の予見をしなかったのが悪かったね。
エクセルDBを突き通すなら突き通すのも選択肢だよ。
予断だけど、エクセルDBは正規化と設計がしっかりしてれば、相当なデータ量持てる。
設計段階がお粗末だと論外だけどね・・・。
0984デフォルトの名無しさん
2009/09/29(火) 19:56:12他のシステムとの兼ね合いでExcelを入力インタフェースに使うという意味でもね。
データはきちんとデータベースで扱うにこしたことはない。
しかし絵をかける人間がいないのなら仕方ないわな。
0985デフォルトの名無しさん
2009/09/29(火) 20:06:43導入の稟議書出しても費用対効果を説明するのが難しいよね。
0986デフォルトの名無しさん
2009/09/29(火) 20:23:19ライセンスの概念もないし。
0987デフォルトの名無しさん
2009/09/29(火) 20:23:590988デフォルトの名無しさん
2009/09/29(火) 21:11:40君が無知なだけ。
業界は関係ない。
0989デフォルトの名無しさん
2009/09/29(火) 22:05:52質問に対する回答なんかせずに
ご教授(笑)とかご高説(苦笑)しかしないやつが増えたな
0990デフォルトの名無しさん
2009/09/29(火) 23:00:570991デフォルトの名無しさん
2009/09/30(水) 00:43:42(javascritにある機能みたいなの)
1秒ごとにSQLを実行するとかしたいです。
0992デフォルトの名無しさん
2009/09/30(水) 00:50:570993デフォルトの名無しさん
2009/09/30(水) 00:58:15恒常処理するならライブラリでSleep使ったり
0994デフォルトの名無しさん
2009/09/30(水) 00:59:280995デフォルトの名無しさん
2009/09/30(水) 01:03:34Application.OnTimeで指定時刻にマクロ起動
起動されたマクロで次の時刻(1秒後)を指定すれば繰り返しになる
0996デフォルトの名無しさん
2009/09/30(水) 01:04:33Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Test()
ループ開始
Sleep 1
DoEvents
なんかイベント
(イベント内容によってはループ処理中断)
ループ終了
End Sub
0997デフォルトの名無しさん
2009/09/30(水) 01:37:38ありがとう
0998デフォルトの名無しさん
2009/09/30(水) 02:09:42それだと1秒間隔にならないじぇ
1秒+ループ処理1回分の長さになる
0999デフォルトの名無しさん
2009/09/30(水) 02:17:15Application.OnTimeで指定時刻にマクロ起動
起動されたマクロで次の時刻(1秒後)を指定すれば繰り返しになる
1000デフォルトの名無しさん
2009/09/30(水) 02:17:5810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。