[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/04 11:41 / Filesize : 289 KB / Number-of Response : 962
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

●EXCEL・VBA質問スレ Part2●



1 名前:デフォルトの名無しさん [2007/05/27(日) 00:06:58 ]
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

前スレ
pc11.2ch.net/test/read.cgi/tech/1168308855/

652 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:50:37 ]
Dim time As Variant
Function settime() As Variant
time = Timer
End Function
Function gettime() As Double
gettime = Timer - time
End Function
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
mytime = Format(gettime, "####.00")
ThisWorkbook.Application.Caption = mytime
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
settime
End Sub


653 名前:649 mailto:sage [2007/08/19(日) 21:34:16 ]
>>650
ありがとうございます。Excelから切り離すってことはVBかなんか使って別アプリにしてしまう
ということですよね?VBA以外やったことないんですが・・・これを機に勉強しようかな
>>651
ありがとうございます。
あくまで入力作業中のおまけというかアクセサリ的なものとして表示させておくつもりだったので
その発想はなかったです。試しにやってみたらフォーム上のtextboxへの入力中ならちゃんと
タイマーを表示するマクロも動き続けますね。とりあえずこの方法でやってみます。
>>651
わざわざコードまで書いてもらって恐縮です。
言葉足らずで申し訳ありませんでしたが、入力確定後にかかった時間を表示するだけじゃなく
入力中もかかってる時間を表示させ続けたいのです。

654 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 21:45:48 ]
>>639
エラーでます

655 名前:デフォルトの名無しさん [2007/08/20(月) 02:39:20 ]

こんな有用なスレがあったんですね。
早速ですが、1つ教えてください。

Excelで、次のようなことがしたいのですが、どのようにしたら良いでしょうか。
・事前に、ユーザーが新規ブックを開いておく
・そのままの状態で(ボタンなどを押すことなく)
・PCのCOMポートから送られてくる文字を、順番にセルに書き出す。
   ボタンを押して....のようなイベントの発生による関数の起動ではなく、
   COMポートの受信割込発生をイベントとした関数の起動がしたいのです。

現在は、
シート上に作ったボタンを押すことで、セルに書かれた数字/文字を、PCのCOMポートからRS232Cで送り出したり、
同じくシート上に作ったボタンを押すことで、COMポートを開いて受信状態となり、
数字/文字を受信したら罫表に書き込んだり などは、結構何度も作っているのですが、
今回は、「ボタンを押さなくても」自動的に受信できないかと思うのです。

何か特別な方法が必要でしょうか、あるいは、VBAの関数にすでに用意されているのでしょうか?
宜しくお願いします。


656 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 06:35:04 ]
Private Sub Workbook_Open()
処理
End Sub

657 名前:デフォルトの名無しさん [2007/08/20(月) 21:11:30 ]
1,エクセルの左側にあらかじめ設定している列を折りたためる、ボタンがあるシートがあるんですけど、
どのように設定すればいいのでしょうか?
2、functionを使用して、同じ計算式をマクロに計算させようとすると、5倍位時間がかかるようになりました。
どのような対策を取ればいいのでしょうか?


658 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:21:42 ]
1 そのまんま。そのボタンに列の表示非表示を切り替えるマクロを登録すればいいだけ。
2 ワークシート関数よりユーザー定義関数の方が遅いのは当然だが、そういうことじゃないのか?
 違うなら日本語で質問してくれ。あとそのFunctionの内容も書くこと。

659 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:26 ]
>>657
1.グループ化の事か?

660 名前:631 mailto:sage [2007/08/21(火) 01:22:25 ]
本やみなさんの意見を参考にしながら一応、出来たのですが

Sub セル範囲を指定して格子罫線を引く()

Dim Rng As Range
Set Rng = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8)
Rng.Borders.LineStyle = xlContinuous
End Sub

少し、改造すれば、セル範囲を指定してセルの色を塗り替えるにもできます(せっかく、作ったので、良かったら参考にして下さい)
これに、キャンセルしたときに「入力されませんでした」と表示するようにしたいのですが、どうもわかりません

Sub セル範囲を指定して格子罫線を引く2()

Dim jis As Range
Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8)
If jis <> "" Then
Rng.Borders.LineStyle = xlContinuous
else
msgbox"シート名が入力されませんでした"
End If
End Sub

上のソースだとエラーになってしまいます
お手数ですが、ご指導お願いします。



661 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:33:33 ]
サンプル

Dim returnData As Variant
returnData = Application.InputBox("データを入力してください", Type:=1)

If VarType(returnData) = vbBoolean Then
MsgBox "キャンセルされました"
Exit Sub
End If

MsgBox "処理を続行します"



662 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 06:58:45 ]
>>660
インプットボックスメソッドはエラー処理が必要
On Error Resume Next
Set jis = Application.InputBox("セル範囲を指定してください", "セル範囲の指定", Type:=8)
On Error GoTo 0
こんな感じ。ヘルプ見てね!

あと入力されなかった時はキャンセルにしてしまう場合
If jis Is Nothing Then Exit Sub




663 名前:662 mailto:sage [2007/08/21(火) 11:16:43 ]
こんな感じかな?

Sub セル範囲を指定して格子罫線を引く662()
Dim Rng As Range

Application.DisplayAlerts = False
On Error Resume Next
Set Rng = Application.InputBox( _
prompt:="セル範囲を指定後 [ OK ] を押して下さい。" _
& Chr(13) _
& "【セルを選択しないと [ OK ] は無効です。】", _
Title:="罫線を引くセル範囲を指定してください", _
Default:="", _
Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True
If Rng Is Nothing Then
MsgBox "中止します"
Exit Sub
Else
Rng.Borders.LineStyle = xlContinuous
End If
End Sub


664 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 17:59:15 ]
>>660
あなたにとって自慢したい自信作かもしれないけど?敢えて苦言を

>本やみなさんの意見を参考にしながら一応、出来たのですが
何もしないで、OKまたはキャンセル押したらエラーになるよね?
これは「出来た」には程遠い!糸口がみつかった程度。
エラーが出るうちは未完成ですね

>(せっかく、作ったので、良かったら参考にして下さい)
恐らく参考にならないでしょう


Sub セル範囲を指定して格子罫線を引く2() ←コンパイルした?
宣言してない変数があるんだけど。

>If jis <> "" Then
これはマズイよね、"" は文字列だから、変数 jis が String じゃないとエラー起こす。

665 名前:657 mailto:sage [2007/08/21(火) 22:49:15 ]
>>658
回答ありがとうございます。
1、については、>>657さんの回答で要領を得ました。
2、ワークシート関数よりユーザー定義関数の方が遅くて当然との事ですが、
なんらかの方法で、処理速度を上げられないだろうかとかんがえております。
内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)

666 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:28:34 ]
>なんらかの方法で、処理速度を上げられないだろうかとかんがえております。
ワークシート関数を使え。
マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。

667 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 23:39:03 ]
>マクロ(VBA)でやりたいなら、ワークシート関数を空きセルに貼ってしまえ。
遅いんじゃない?
ワークシート関数をVBA上で使うと速いけど。
必要なデータは配列に格納し一気に処理(セル参照を頻繁にしないこと)が最速!

668 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:13:58 ]
>>667 そうだね

速度重視ならワークシート上で計算しない設定に。もちろん数式は使わない

セル参照も最小限に。理想は、
シート上の必要なデータを配列に一気に格納、
結果は全て配列に格納し一気にシート上に書き込む

669 名前:631 mailto:sage [2007/08/22(水) 00:30:23 ]
>>661-663 わざわざ、ソースを全部書いて頂いて、本当に申し訳ありませんでした

お騒がせしました

670 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 06:36:51 ]
>>665
>内容は、単純な関数です。(セル内に同じ計算を必要とするため、マクロ化を検討しています。)
実際のコード晒してみれば?

具体的には、Cells( i ,j ) がコードに頻繁に出ると遅くなります。特にLoopの中は避けるべき。
私が始めて作った物は、データ取る為に2万回、書くために30万回、頻繁にCells( i ,j ) が...
おまけに Selectしまくってましたので
処理が終るまで30分以上かかってましたが、つくり直したら20秒ほどで出来た!



671 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 11:45:58 ]
エクセルでバイナリエディタって作れますか?

672 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:30:58 ]
もちろん作れるよ


673 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 18:03:10 ]
>>672
ありがとう!

674 名前:657 mailto:sage [2007/08/22(水) 21:00:20 ]
>>666
出来れば、マクロ内で処理したいと考えております。
シミュレーションファイルを作成中でして、他セルにも複雑な式が入っているので、
単純な関数なら、マクロに放り込んでしまいたいのです。
>>667>>668
配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。
>>670
function A(b,c,d,e)
 b=(c+d)/2
 A=b*e
end

こんな単純な計算を、10〜20個織り込み、かつシート上で近似値を算出する計算式を使っているので、
時間がかかります。

675 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:20:16 ]
>配列は考えていませんでしたが、計算結果を返すセルが決まってないため、ユーザ定義関数を使おうと思ったしだいです。
理由になってないんじゃない?
配列を拒否するなら私は手を引くよ!

676 名前:デフォルトの名無しさん [2007/08/22(水) 21:31:34 ]
すみません。どなたかご存知でしたらお教えください。
VBAでsleepに該当する命令ってなんでしょうか?
WSHで、WScript.sleep(250)みたいな感じでやっているんですが、
これをVBAでやりたいです。

677 名前:デフォルトの名無しさん [2007/08/22(水) 21:44:35 ]
319 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 16:08:34 ID:aEA9W/2t
ttp://kissho2.xii.jp/20/src/2yoshi2512.7z.html 目欄
344 名前:名無したん(;´Д`)ハァハァ[sage] 投稿日:2007/08/22(水) 18:55:20 ID:YevU/rPG
>>319はウイルス。拡張子が怪しすぐる

らき☆すた 27
sakura03.bbspink.com/test/read.cgi/ascii2d/1187586266/

678 名前:デフォルトの名無しさん [2007/08/22(水) 21:56:37 ]
>>676
標準モジュールに
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

679 名前:デフォルトの名無しさん [2007/08/22(水) 22:07:05 ]
>>678
ありがとうございます。できました。
こんなテクあるんですね。勉強になりました。

680 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:08:37 ]
>>657
オレも

>>656
Timer関数



681 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:10:12 ]
↑誤爆

682 名前:デフォルトの名無しさん [2007/08/22(水) 22:39:11 ]
恐れ入ります、質問を失礼します。

Dim st4 As String
Dim r1 As Range,

st4 = Mid(r(1).Offset(2).Value, 5, 10) & "-" & Mid(r(1).Offset(3).Value, 2, 10)

こんな感じで13-1とか2-9といったst4にしたいのですが、
-の後が空欄の時があります。
そういったときは13-のようになってしまいますが、
-の後が空欄の時は13といったように-も表示させたくないです。
こういったことは可能でしょうか?



683 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:03:57 ]
可能です
- は変数ハイフンに入れる 
Dim ハイフン As String
3個の文字列を無条件で&で結合せず
IFで条件分岐してから結合すればよい

ハイフン = "-"
If Mid(r(1).Offset(3).Value, 2, 10) = "" then ハイフン = ""
st4 = Mid(r(1).Offset(2).Value, 5, 10) & ハイフン & Mid(r(1).Offset(3).Value, 2, 10)

684 名前:デフォルトの名無しさん [2007/08/22(水) 23:12:03 ]
>>683
おお、できましたぁ!!ありがとうございます!!!
これでボクの仕事がかなり減りました、感謝です♪

685 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:16:40 ]
while ブロックで breakって出来ないの?

686 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:47:11 ]
Exit使えよカス

687 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:53:55 ]
か、かすう?
この俺様に向かって!

688 名前:デフォルトの名無しさん [2007/08/23(木) 00:06:25 ]
いつもお世話になります、1点質問を失礼します。無理やり上司から頼まれましたが、自分には無理難題です。
@もし○○○○の後7文字全てが半角英数字だったら、このセルの5文字目〜半角スペースに当たるまでをコピー、「α」とする

○○○○0120123456 ○

α=0120123456

○○○○の後7文字に1文字でも全角文字が入っていたら、○○○○の一つ下の行の先頭から半角スペースに当たるまでを全てコピー「α」、さらに2つ下の行の先頭から「か」という文字に当たるまでをコピー、さらに○○○○から先の文字全てを繋げ「β」とする

○○○○あい12うえおあい
0120789123 ○○
Aか

α=0123789123
β=Aあい12うえおあい

できればifでやりたいんですが、
Dim α As String, β As String
Dim r(1) as range '○○○○の行がr(1)とします

If Mid(r(1).Value, 5, 7) = 全部半角英数字 Then  α=Mid(r(1).Value, 5)から" "まで

Else α=r(1).Offset(1).の先頭から半角スペースに当たるまで全て
   β=r(1).Offset(2).の先頭から「か」に当たるまでをコピー&Mid(r(1).Value, 5, 99)

End if

すいません、自分ifの文に弱いものでかなり違うかもしれませんが、こんなマクロにしたいのです。宣言とかの理論は理解してます。お手数ですが、よろしくお願いします。

689 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:21:56 ]
>>688
>>7文字全てが半角英数字
これって、記号類や半角カナはどうする?
とりあえず、半角・全角の判定だけでいいか?
それとも、英数字に限定?



690 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:30:25 ]
とりあえず、半角・全角の判定のやり方だけど、

VBAには文字列の長さを調べる関数が3つある。
Len()、LenB()、LenMbcs()
の3つ。

Len()とLenMbcs()の結果が同じ→全部半角
Len()とLenMbcs()の結果が違う→全角を含む

と判定できる。
ただし、LenMbcs()はVBAには実装されてなくて、自分で書かないといけない。
書き方はMSDNに紹介されてる。

office.microsoft.com/en-us/access/HA012288741033.aspx
Function LenMbcs (ByVal str as String)
  LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

LenMbcs()は、半角で1、全角で2を返す関数。



691 名前:デフォルトの名無しさん [2007/08/23(木) 00:35:39 ]
>>689
失礼しました。
半角数字のみの時です、全角や記号や半角カナは×です。

692 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:50:08 ]
'とりあえず、文字列strが数字かどうか判定する関数。
もっと少ない行数の書き方もあるんだが、あえてわかりやすく書いてみた。

Function IsNumberString(str As String) As Boolean
Dim i As Integer
Dim c As String
Const Number = "0123456789"

For i = 1 To Len(str)
c = Mid(str, i, 1)
If InStr(1, Number, c, vbBinaryCompare) > 0 Then
'c が数字だったので何もしない
Else
'c が数字ではなかった
IsNumberString = False
Exit Function
End If
Next i
IsNumberString = True
End Function


693 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 00:57:23 ]
'strの中にある半角スペースを探して、
'その手前までをコピーする関数。

Function LeftEx(str As String) As String
Dim i As Integer
i = InStr(1, str, " ", vbBinaryCompare)
LeftEx = Left(str, i - 1)
End Function


694 名前:デフォルトの名無しさん [2007/08/23(木) 21:25:50 ]
今週からエクセルを使う仕事に就いて昨日マクロにはじめて触れた
初心者で申し訳ないのですが

ワークシートが2〜32まであり
各ワークシートのたとえばB5に以下のように入力したいのですが

ワークシート2のB5に2007/8/1
ワークシート3のB5に2007/8/2

ワークシート32のB5に2007/8/31



For sht = 2 To 32
Worksheets(sht).Select
Range("B5").Select
ActiveCell.FormulaR1C1 = "8/1/2007" + (sht-2)
Next sht
End Sub

これでは当然駄目でした。
今週末になれば自分で勉強しますが
できれば明日使いたいので
よろしければ教えてくださいませ何卒

695 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:03:21 ]

俺の都合に合わせて、即答しやがれ糞共!!

ってわけですか
まぁそういうこと言う奴でも、こういう簡単な質問は
答えたくてウズウズしてる教えたがり厨が答えてくれるだろうけどw

696 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:08:02 ]
Microsoft Access VBAの質問もここでおk?
Accessのスレないんだものorz

697 名前:657 mailto:sage [2007/08/23(木) 22:45:14 ]
>>675
失礼しました。

698 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 22:45:18 ]
>>696
moug に逝った方がいいんじゃね?

699 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 23:46:18 ]
質問させてください。
VBA使って簡単な画像処理をしたいのですが、
画像の輝度値を求める関数って無いのでしょうか?
よろしくお願いします。

700 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 00:31:35 ]
>>695
わざわざ質問スレに出張ってきて

こんな簡単な質問答えるやつは、
教えたがり厨だ!!

ってわけですか?




701 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:08:05 ]
>>694
未テストだがこんな感じ

Public Sub SheetLoop()
Dim wksSheet As Worksheet
Dim dtDate As Date
Dim intOffset As Integer
Dim strbuf As String

dtDate = "2007/08/01"
For Each wksSheet In ThisWorkbook.Worksheets
strbuf = wksSheet.Name
If 2 <= CInt(strbuf) And CInt(strbuf) <= 32 Then
wksSheet.Cells(5.2).Value = Format$(dtDate + intOffset, "yyyy/mm/dd")
intOffset = intOffset + 1
End If
Next
Set wksSheet = Nothing
End Sub


702 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:24:03 ]
>>701の注意点

シートの名称がイマイチ意味不明なのでとりあえずcintしたが、
これがSheet1とかのパターンが出てくると間違いなくエラーになるので、
isnumericで事前に回避するか、Sheet1系統でOKの場合は
"Sheet"&カウントで文字列連結してstrcompで見てやる必要がある。

今後の注意点
・1文字変数は使わない
・Activate,Select系は使わずオブジェクト経由でアクセスすること
・A1形式は極力使わない
・上記に伴いRangeを使う場面ではCellsで展開してから使用する
・セルに入れる値が日付や文字列や数値など、フォーマットが決まっている場合は
表示形式をNumberformatなどで事前に指定してやる

703 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:32:20 ]
>>702
これって2月とかエラーにならね?
普通にDateAdd使えば?

704 名前:703 mailto:sage [2007/08/24(金) 01:33:57 ]
うっは流し読みしすぎた

>dtDate = "2007/08/01"

で8月限定にしてんのか。すまん

705 名前:デフォルトの名無しさん [2007/08/24(金) 02:46:23 ]
X軸の数値 Y軸の数値
0 -1.5e-9
10 2.5e-8
20 4e-8
30 5e-7
40 6e-5
50 9e-3

のようなデータををX軸は普通、Y軸を対数にしてグラフ化しようとすると、
負の数を入力しようとしています。対数には負の数が入りませんとかエラーが
出ます。(それは当然分かります)
強行すると、この場合、X軸が0の場合を除いてグラフにしてくれます。

動作としてはそれで問題ないのですが、大量にグラフを作成しようとすると、
毎回エラーが出てうざったいのです。なんとかエラーメッセージを消去
して出なくしたいのですが、いい方法はないでしょうか。


706 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 02:53:19 ]
>>705
事前に負の値を取り除く。

707 名前:705 [2007/08/24(金) 03:00:08 ]
>>706
やはり、そういう感じでやるしかないのですか・・・
今はABSで絶対値にして逃げてるのですが。

708 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 05:38:20 ]
そもそも負の値をとりうるデータを対数変換するってデータ処理としてどうよ?

709 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 07:38:02 ]
>>707
それはおかしいだろう。対数を取りたいってことは負値はIllegalなんでないの?
或いは全体にオフセットを足すべきだったりはしない?

710 名前:デフォルトの名無しさん [2007/08/24(金) 11:13:05 ]
EXCEL VBAでフォームを使用して、ユーザーに
ファイルを選択してもらう仕組みを作りたいんですが可能でしょうか?

「参照」ボタンを用意して、ユーザーがクリックすると
フォルダ内のファイルが一覧表示されて、指定できるようなイメージです。



711 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:05:25 ]
出来ますよ

必要なコントロールを配置して
> 「参照」ボタンを用意して、ユーザーがクリックすると
> フォルダ内のファイルが一覧表示されて、指定できる
をコードにすれば良いだけです

712 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 12:06:32 ]
>>710
Dialogsオブジェクト

713 名前:710 mailto:sage [2007/08/24(金) 13:12:05 ]
>>711,712
ありがとうございました!
ちょっと調べてみます!!


714 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:40:24 ]
"俺の関数"というファイルにあるテーブルをVlookupした値を加工するユーザー定義関数を、"俺の関数.xla"の標準モジュールに作成しました。
他のファイルから"俺の関数"アドインを有効にしてみましたが、利用できません。どうすればいいですか?

Public Function 俺の関数(key)
fjFilename = "D:\Settings\俺\Application Data\Microsoft\AddIns\俺の関数.xla"
俺の関数 = WorksheetFunction.VLookup(key, Workbooks(fjFilename).Range("テーブル"), 2, 0)+1+2+3
End Function



715 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:10:50 ]
>>710
Application.GetOpenFilename


716 名前:デフォルトの名無しさん [2007/08/26(日) 09:28:40 ]
sv2.st-kamomo.com/loader/dat/file17227.42952.jpg

競馬の出走馬が並んだデータなのですが
これをレースごとに他のシートにコピペすることはVBAで可能でしょうか?

ちなみにレース場所は毎回異なります。

717 名前:デフォルトの名無しさん [2007/08/26(日) 09:33:42 ]
可能

718 名前:デフォルトの名無しさん [2007/08/26(日) 09:34:33 ]
>>717
可能だとするとどう命令すべきでしょうか?

719 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:41:35 ]
>>718
「やれ!」

720 名前:デフォルトの名無しさん [2007/08/26(日) 09:47:09 ]
(・c_・` )ソッカー



721 名前:716 [2007/08/26(日) 11:23:09 ]
マクロではできましたが今週の競馬開催の場所が毎回変わりますから
そこができないですね・・・


722 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:50:17 ]
出来るけど、何か?
君が出来ないなら努力不足

723 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:54:41 ]
>これをレースごとに他のシートにコピペすることはVBAで可能でしょうか?



これをレースごとに他のシートにコピペすることはVBAで可能ですが、
どうやったらいいでしょうか?

724 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:09:18 ]
マクロまでできたらそのマクロをいじれ
どういじればいいかは学べ


725 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:20:18 ]
手でコピペは出来るんでしょ。
レースごとに分割する基準は何?
それをマクロに書けばいいだけ。

726 名前:デフォルトの名無しさん [2007/08/26(日) 12:23:37 ]
>レースごとに分割する基準

場所+レース番号  例) 札幌 9

または 馬番1〜大外枠

・・・

727 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 12:45:05 ]
まずシートを作って

Sheets.Add
ActiveSheet.Name = 場所+レース番号  例) 札幌 9

あとは判るだろ

728 名前:デフォルトの名無しさん [2007/08/26(日) 12:53:39 ]
>>727
いやそれは分かるんだけどさ
競馬って毎週「札幌」があるわけじゃないのよ
10箇所以上の場所から2つ3つあるわけで・・・

729 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 13:04:45 ]
変数
ヘルプ
これ以上書くことないな!

730 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:25:56 ]
VBAマスターするコツってありますか?
反復演習・努力ですかね?



731 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:29:24 ]
そもそも何を持ってマスターしたと言えるのか
誰もわからない(あるいは人によってマスターの基準が大きく異なる)ので、
誰もマスターしたなんて言わない。

732 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:53:26 ]
初心者用の1冊をマスターしても実用性はないよな

733 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 16:24:13 ]
最初は初心者用の入門書のとおりに実際に動かしてみる。
(一週間程度)

次は、簡単なオリジナルのコードを沢山作る。その際
他人に質問しないで自力で検索したりヘルプを見たりする。←最も重要
同時にVBA掲示板を閲覧し自分のレベルにあった質問で勉強する。
未だ、自分で質問はしない方が良いと思う。
(一ヶ月程度〜数年以上)

そのうち、ヘルプを見れば理解できるようになる。このレベルになれば
他人に質問しても相手に失礼じゃないと思う。

スクール行ったって資格は取れるかもしれないが実力がつくとは限らない。
やる気があれば独学で十分だとおもう。

734 名前:デフォルトの名無しさん [2007/08/26(日) 16:46:44 ]
俺の頭脳じゃ100年経ってもできないっぽい
実現させるには達人に出会ってお金を出して作ってもらう他ないな・・・

735 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:08:50 ]
>>733
それ以前に、一般機能をひと通り理解してないと無理じゃない?

736 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:14:25 ]
何を馬鹿なことを…

初心者用の本は斜め読み。
必要そうなとこだけを重点的に。
使いたいときだけさっと調べ(本屋、GOOOOOOOGLE)

出来そうじゃなかったらあきらめる。(どうしてもVBAでMSNメッセンジャー作りたいんです >< )

737 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:26:56 ]
VBA本は初心者本ばかりか上級者向けとされている本ですら、
変数の命名規則が不明(どころか明示すらしない)だとか、見やすいコーディングを
考えないとか、速度に触れていないとか、後始末を省略してるとか、コレクションとか
クラスの使用法が全く記載されてないとか、そんなのばっかだから、その手の本の
まんまのコーディングはあんまり業務としての実用性はない
Excelレガシー問題ってこういう本の氾濫が大きいと思う
結局、リファレンスだけあればいいってことになる

738 名前:デフォルトの名無しさん [2007/08/26(日) 18:35:13 ]
初心者はプログラム自体にとっつきにくさと
わかりづらさから飽きがきやすいので
かなり偏った内容でも、とにかく楽しく、とにかく簡単で
実際にプログラミングしてみて動かせるような本が好ましい。
サンプルのついた本は腐るほどあるけど
一生使いもしないような題材だと萎えるから
そこのとこも吟味してほしい。



739 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 18:40:28 ]
だからこそ>>736なんだが。
それにね、途中で興味がなくなったらそれはそれでいいんだよ。
VBAは何かの手段であって目的じゃないはず。
C++やc#でもやればいいんだよ。

740 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 20:57:33 ]
>>735
そうですね。
一般機能のIF関数やVLOOKUPを使いこなせない人は苦労しそうだね?



741 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:36:12 ]
自分に降りかかる/手が出せる範囲の仕事で滞りなく使えること。
VB「A」なら、↑でマスターしたって言っていいでしょ。
ということは「自分の仕事でVBA使って自動化/効率化したいこと」が
最高の教材になるんじゃないか?

職業プログラマの人は知らんけど。
もしそうなら別の言語マスターした方がよさそうだし。

742 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 21:43:30 ]
VBAは簡単なのがいいね
C言語に何度も挫折した俺でも使える
VBにステップアップしようとしたけど.NET何たらになってて
よくわからなくて結局VBAに戻ってきた

743 名前:デフォルトの名無しさん [2007/08/26(日) 22:12:14 ]
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

Loopんところでオブジェクトが無いとかって
エラーになるんですけどなんでですか?
途中で違うFindするとcの方のFindが無効になっちゃうのでしょうか?

744 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:13:40 ]
ちゃんと例外処理しろよ

745 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 23:22:45 ]
Loop While Not c Is Nothing And c.Address <> firstAddress

両方評価してからアンドの評価するからアウト



746 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 06:58:40 ]
きたねーコードだな

747 名前:743 [2007/08/27(月) 09:52:45 ]
>743ですが、Findのヘルプに載っている
使用例に下記一行を加えただけです。

Set d = Worksheets(2).Range("a1:a500").Find(2, lookin:=xlValues)


この一行が無ければ、動きます。
この一行を追記しただけでエラーになる理由が知りたいです。


748 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 12:55:18 ]
なんで解らないのかが知りたいです。

749 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:11:31 ]
>>747
むしろヘルプをコピっただけで
エラーになる俺に動く方法を教えてけれ

>c.Value = 5
をコメントアウトしないと
>Loop While Not c Is Nothing And c.Address <> firstAddress
のところで
cがNothingだから
c.Addrssがエラーになる

Loopのなかに
If c Is Nothing Then Exit Do
とか入れれば問題ないけど
これってヘルプが間違ってんの?
それとも条件しだいでは問題ないの?

750 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 14:34:19 ]
>>743
> Loopんところでオブジェクトが無いとかって
> エラーになるんですけどなんでですか?
エラーメッセージを正確に書き写せばいいのに。
簡単な英語もわからないと不便だね。



751 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 18:21:56 ]
エラーって日本語だろ?

752 名前:デフォルトの名無しさん [2007/08/27(月) 20:16:40 ]
屁理屈ばっかごねてるヴァカ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<289KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef