- ベストアンサー
【ExcelVBA】FreeFile関数とGet関数の使い方について
- ExcelVBAを使用した部署で勉強中の初心者です。質問ですが、「FreeFile」と「Get」の使い方がよく分かりません。具体的には、(FNAME)という名前のファイルにある数百万個の数値を、R()という配列に格納しているようです。これらの関数の使い方を教えていただけないでしょうか。
- ExcelVBAで作業している初心者です。質問なのですが、「FreeFile」と「Get」という関数の使用方法がわかりません。具体的には、(FNAME)というファイルに数百万個の数値があり、それらをR()という配列に格納しているようです。どのように使うのか、教えていただけないでしょうか。
- ExcelVBAを学んでいる初心者です。質問なのですが、「FreeFile」と「Get」という関数の使い方がよく分かりません。具体的には、(FNAME)という名前のファイルにある数百万個の数値を、R()という配列に格納しているようです。これらの関数について、詳しく教えていただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- エクセルマクロで定義した関数が動きません
以前にマクロの記述について教えて頂いた件の続きになります. ご指導頂いたとおりExcelマクロで複素数を扱う関数を下記HPから 標準モジュールにコピペしました.今度は正しくコピーできたと思いますが, 実行するとエラーになります. 標準の組込み関数を用いて「実数」の行列を計算すれば正しく 計算できますが,当然ながら「複素数」は計算できません. この「複素数」を扱う新しく定義した関数が動かない理由, 「End if に対するifブロックがありません」とか 計算結果が「#VALUE!」となってしまうのは何故でしょうか? マクロの記述内容はほとんど理解できないのですが, どなたか助けて頂けませんか! ちなみにエクセルは2016版です. http://www.geocities.jp/tomtomf/denki/AC2/ac2.htm http://www.geocities.jp/tomtomf/denki/AC1/ac1.htm 以下はコピー定義した「 IMMULT」関数と「 IMINVERS」関数のマクロです. Public Function IMMULT(a As Range, b As Range) As Variant Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer Dim r As Integer, c As Integer Dim cr As Integer, cc As Integer Dim n As Integer Dim mm() As Variant r1 = a.Rows.Count r2 = b.Rows.Count c1 = a.Columns.Count c2 = b.Columns.Count If (c1 = r2) Then nn = c1 Else Exit Function End If cr = r1 cc = c2 ReDim mm(1 To cr, 1 To cc) For r = 1 To cr For c = 1 To cc mm(r, c) = 0 For n = 1 To nn mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c))) Next Next Next IMMULT = mm End Function Public Function IMINVERS(a As Range) As Variant Dim n As Integer, n1 As Integer, n2 As Integer Dim r1 As Integer, r2 As Integer, c As Integer Dim max As Variant Dim i As Integer Dim m() As Variant Dim inm() As Variant Dim rr As Integer, cc As Integer Dim no As Integer, ex As Variant n1 = a.Rows.Count n2 = a.Columns.Count n = n1 ReDim inm(1 To n1, 1 To n2) For rr = 1 To n1 For cc = 1 To n2 If rr <> cc Then inm(rr, cc) = 0 Else inm(rr, cc) = 1 'End If Next Next ReDim m(1 To n1, 1 To n2) m = a If n1 <> n2 Then IMINVERS = False Exit Function End If For r1 = 1 To n max = m(r1, r1) no = r1 If r1 < n Then For i = r1 + 1 To n If IMABSa(m(i, r1)) > IMABSa(max) Then max = m(i, r1) no = i End If Next If (r1 <> no) Then For i = 1 To n ex = m(r1, i) m(r1, i) = m(no, i) m(no, i) = ex Debug.Print m(r1, i), m(no, i) ex = inm(r1, i) inm(r1, i) = inm(no, i) inm(no, i) = ex Next End If End If max = m(r1, r1) For i = 1 To n m(r1, i) = IMDIVa(m(r1, i), max) inm(r1, i) = IMDIVa(inm(r1, i), max) Next For r2 = 1 To n If r1 <> r2 Then max = m(r2, r1) For i = 1 To n m(r2, i) = IMSUBa(m(r2, i), IMPRODUCTa(m(r1, i), max)) inm(r2, i) = IMSUBa(inm(r2, i), IMPRODUCTa(inm(r1, i), max)) Next End If Next Next IMINVERS = inm End Function
- ベストアンサー
- Visual Basic
- ExcelVBA For・・・Next
今年に入ってからExcelVBAを勉強し始めました For・・・Nextについて疑問があります 例えば下記のような Sub aa() Dim i As Integer For i = 1 To 10 Next ActiveCell.Value = i End Sub 上記を実行するとアクティブセルは[11]になります 普通に考えると[10]だと思うのですが? なぜでしょうか? お願いします
- ベストアンサー
- オフィス系ソフト
- 以前に回答いただいたVBAですが、理解できない部分があったので、抜粋し
以前に回答いただいたVBAですが、理解できない部分があったので、抜粋して質問に投稿したところ、多くの方々から、「これでは、わからない」などの指摘をいただき、これでは、以前に回答していただいた回答者様の名誉にかかわると思い全文を記載させていただくことにしました。 あわせて、この、VBAの詳しい説明を快くしていただける方は回答よろしくお願いします。以下のとうりです。 A列 B列 1 期間 90 2 人数 21 3 4 氏名 回数 5 A 23 6 B 23 7 C 19 8 D 16 9 E 12 10 F 9 11 G 8 12 H 7 13 I 7 14 J 6 15 K 6 16 L 6 17 M 5 18 N 5 19 O 4 20 P 4 21 Q 4 22 R 4 23 S 4 24 T 4 25 U 4 Sub 当番割当() Dim 期間 As Integer Dim 人数 As Integer Dim 氏名() As String Dim 回数() As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim m As Integer Dim n As Integer Dim n1 As Integer Dim n2 As Integer Dim p As Single Dim q As Single Dim 当番() As String Dim 担当() As Single 期間 = Cells(1, 2) 人数 = Cells(2, 2) ReDim 氏名(人数) ReDim 回数(人数) For i = 1 To 人数 氏名(i) = Cells(4 + i, 1) 回数(i) = Cells(4 + i, 2) Next i ReDim 当番(期間 * 2) ReDim 担当(期間 * 2) n = 0 For i = 1 To 人数 n1 = 0 n2 = 0 For j = 1 To 人数 If 回数(j) = 回数(i) Then n1 = n1 + 1 If j <= i Then n2 = n2 + 1 End If Next j p = 期間 / 回数(i) For j = 1 To 回数(i) q = p * (n2 - 0.5) / n1 + p * (j - 1) m = 1 For k = n To 1 Step -1 If 担当(k) <= q Then m = k + 1 Exit For End If 当番(k + 1) = 当番(k) 担当(k + 1) = 担当(k) Next k 当番(m) = 氏名(i) 担当(m) = q n = n + 1 Next j Next i Range("E:G").Clear For n = 1 To 期間 Cells(n, 5) = n & "日" Cells(n, 6) = 当番(n * 2 - 1) Cells(n, 7) = 当番(n * 2) Next n End Sub
- ベストアンサー
- オフィス系ソフト
- VB2005 図形
VisualBasic2005で Dim n As Integer, m As Integer Dim i As Integer, j As Integer Const lenn = 1500, PAI = 3.14159 Dim th As Single, th1 As Single, th2 As Single Dim x1 As Integer, x2 As Integer Dim y1 As Integer, y2 As Integer n = Val(TextBox1.Text) m = Val(TextBox2.Text) If n < 2 Or m < 2 Then Exit Sub End If For i = 0 To n - 1 For j = 1 To n - 1 th = j * (PAI / n) th1 = i * (PAI / m) + th th2 = i * (PAI / n) - th x1 = Math.Cos(th1) * lenn + 2000 y1 = Math.Sin(th1) * lenn + 2000 x2 = Math.Cos(th2) * lenn + 2000 y2 = Math.Sin(th2) * lenn + 2000 Next Next の様なコードを使って 球をPictureBoxに書きたいのですが どこにどんなコードが足りないのでしょうか? 教えて下さい
- 締切済み
- Visual Basic
- ユーザー定義関数の構文がわからない
以下のコードがあるのですが、コメントがなくて意味がよくわかりません。k = p(1),n = Application.Count(p),t = Sgn(position)というあたりがいきなり見たことのない構文で戸惑ってます。 インターネットでも調べようがありませんでした。 どなたか下のコードにコメントを入れてくれませんでしょうか?ちなみに株式売買のシミュレーション用の関数です。 Function Positioning(position As Single, x As Single, y As Single, p As Range) Dim k As Single, t As Single, r As Single Dim n As Integer, i As Integer If position = 0 Then Positioning = "": Exit Function k = p(1) n = Application.Count(p) t = Sgn(position) If t > 0 Then l = Abs(x): m = -Abs(y) Else l = Abs(y): m = -Abs(x) End If For i = 2 To n r = (p(i) / k - 1) * t If r >= l Or r <= m Then t = 0: Exit For Next If t = 0 Then Positioning = r Else Positioning = "ポジションは解消されていません" End If End Function
- ベストアンサー
- オフィス系ソフト
- 値渡しについて
UserForm1で以下のように求めた値「R」を UserForm2に渡すにはどのようにすればよいのでしょうか。 **************************************** <UserForm1(コード)> Public R As Integer ----------------------------------- Private Sub CommandButton1_Click() Dim N As Integer : N = TextBox1.Text R= N * 2 + 3 : End Sub **************************************** <UserForm2(コード)> Private Sub CommandButton1_Click() Dim i As Integer : For i = 4 To R : Next i : End Sub **************************************** どなたか教えて下さい。
- ベストアンサー
- Visual Basic
- ExcelVBAで複数のTextBoxから値取得
ExcelVBA初心者です。 複数のTextBoxから値を取得し、 その値を使って計算と文字連結を行なったものを セルに挿入したいのですが、 値の取得からできていないようです。 Dim optData(5) As Integer '入力データ Dim i As Integer 'カウンタ UserForm1.Show '4つのTextBoxのあるオブジェクト表示 For i = 1 To 4 '値取得 optData(i) = UserForm1.Controls("TextBox" & i).Value '確認用 MsgBox optData(i) Next i この方法だとTextBoxの値は取得できないんでしょうか。 教えてください。
- ベストアンサー
- Windows系OS
- Excel VBAライフゲーム
ExcelのVBAでライフゲームを作りたいのですが、次のプログラムの途中以降がわかりません。 もしよろしければ、このつづきの簡単な実行できるVBAライフゲームを教えてください。 続きのプログラムを教えていただけたら幸いです。 Option Explicit Const ALIVE As Integer = 1 Const DEAD As Integer = 0 Const SIZE As Integer = 19 Const Tmax As Integer = 100 Dim C(SIZE, SIZE) As Integer Sub LifeGame() Dim InitRate As Single Dim T As Integer Dim N As Integer Dim Cnext(SIZE, SIZE) As Integer Dim I As Integer, J As Integer InitRate = -1 Do While InitRate < 0 Or 1 < InitRate Loop For I = 0 To SIZE For J = 0 To SIZE If Rnd() < InitRate Then C(I, J) = ALIVE Else C(I, J) = DEAD End If Next J Next I For T = 1 To Tmax For I = 0 To SIZE For J = 0 To SIZE If C(I, J) = ALIVE Then Cells(I + 1, J + 1).Value = "■" Else Cells(I + 1, J + 1).Vallue = "" End If Next J Next I For I = 0 To SIZE For J = 0 To SIZE N = Count(I, J) Next J Next I For I = 0 To SIZE For J = 0 To SIZE C(I, J) = Cnext(I, J) Next J Next I Next T End Sub Function Count(I As Integer, J As Integer) As Integer End Function
- ベストアンサー
- SE・インフラ・Webエンジニア
- Excelマクロで定義の関数実行結果が#VALUE
以前にマクロの記述について教えて頂いた件の再度の質問になります. Excelマクロで複素数を扱う関数を下記HPから標準モジュールに コピペしました.今度は正しくコピーできていると思います. しかし,計算結果がどうしても「#VALUE!」となってしまいます.何故でしょうか? どなたか助けて頂けませんか! http://www.geocities.jp/tomtomf/denki/AC2/ac2.htm http://www.geocities.jp/tomtomf/denki/AC1/ac1.htm 今回は関数定義の「 IMMULT」関数に関する部分に絞っています. ここまで絞ってもエラーになるのは,単純な問題なのでしょうか? 行列の積を求めるマクロの手順にも問題はなさそうです. Public Function IMPRODUCTa(ParamArray a()) As Variant IMPRODUCTa = Application.Run("atpvbaen.xlam!IMPRODUCT", a) End Function Public Function IMSUMa(ParamArray a()) As Variant IMSUMa = Application.Run("atpvbaen.xlam!IMSUM", a) End Function Public Function IMMULT(a As Range, b As Range) As Variant Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer Dim r As Integer, c As Integer Dim cr As Integer, cc As Integer Dim n As Integer Dim mm() As Variant r1 = a.Rows.Count r2 = b.Rows.Count c1 = a.Columns.Count c2 = b.Columns.Count If c1 = r2 Then nn = c1 Else Exit Function End If cr = r1 cc = c2 ReDim mm(1 To cr, 1 To cc) For r = 1 To cr For c = 1 To cc mm(r, c) = 0 For n = 1 To nn mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c))) Next Next Next IMMULT = mm End Function
- ベストアンサー
- Visual Basic
- ExcelVBAで実行時エラーが出ます
このようなマクロを作りました。 Sub WriteCsv() Dim myTxtFile As String, myFNo As Integer Dim myLastRow As Long, i As Long Dim j As Long Dim aaa As Worksheet Set aaa = ActiveSheet Application.ScreenUpdating = False j = 0 myTxtFile = ActiveWorkbook.Path & "\Adress List.txt" Worksheets("List").Activate myLastRow = Range("A4").End(xlDown).Row myFNo = FreeFile Open myTxtFile For Output As #myFNo -----※ For i = 4 To myLastRow If Cells(i, 3) = 1 Then Write #myFNo, Cells(i, 5) j = j + 1 End If Next Close #myFNo ・・・・ ・・・・ このExcelをフォルダーから実行するとすると、※で[ランタイムエラー52]が発生しますが、デスクトップから実行すると出ません。 どのように修正すればいいんでしょうか? よろしくお願いします。
- ベストアンサー
- その他MS Office製品
お礼
Nはファイルの目印を表しているにすぎない、と思って読むと ぐっと分かりやすくなりました。 大変参考になりました! ありがとうございました。