人に聞けない痔の悩み、これでスッキリ >>

ExcelでMINVERSE,MMLUT関数を使って連立一次方程式を解く場合,52元が制限です。53元以上の連立一次方程式は解けないのです。ExcelのMINVERSE,MMLUT関数をそのまま使って,53行以上の連立一次方程式を解くにはどうしたらいいでしょうか。制限以内の行列数に分割して解く方法がありそうな気がしますけど,お分かりの方,教えて下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんばんは。



>>52元が制限です
>これはへルプ、実際経験、書籍・WEBの記述のどれに拠ったものでしょうか。

「52」というのは、
http://support.microsoft.com/default.aspx?scid=k …
[XL2000]配列のサイズの制限について

さらに、
http://support.microsoft.com/default.aspx?scid=k …
操作で Excel 2000 のと Excel 2002 のと Excel 2003 での配列で使用する制限の説明

に出てくることで、正確には、52×52のマトリックスです。

ただ、逆行列は、有名なアルゴリズムですから、
http://www.keep-on.com/excelyou/2000lng2/200010/ …

ここを参考にしてみてください。
英語でも、検索すれば出てくるはずです。本来は、VBのコードです。

ただし、計算は、一方通行ですから、お間違えないように。検算しようと思って、MINVERSE と MMULT を行っても、元には戻りません。

VBAでうまくいかない場合、そのデータ型を工夫してみると良いです。
    • good
    • 0
この回答へのお礼

Wendy02さん
早速の回答ありがとうございます。たいへん参考になりました。私の使っているパソコンのExcelはWindowsXPに付いてたものです。最新のExcelは機能UPされたかもしれません。これから確認してみます。
Wendy02さんの活躍すごいですね。多くの皆さんがどれだけ助かっていることか。益々のご活躍を祈念します。
今後も何かの機会にお世話になるかもしれません。よろしくお願いします。感謝!感謝!です。

お礼日時:2005/09/05 19:16

詳しくない者ですが


>52元が制限です
これはへルプ、実際経験、書籍・WEBの記述のどれに拠ったものでしょうか。
http://www.ryukoku.seikyou.ne.jp/%7Ea95273aq/edu …
の最後の記述では、256元となっていますが。
多分エクセル列数の制限256を意識したものだと思います。
そしてMINVERSE関数は、列数=行数の条件ですね。
どちらが正しいか、別のことを言っているか述べる知識は私には残念ながらありません。
この程度の質問になると、OKWEBでは的確に答えられる回答者層がごく少ないようです。といっても正解は1人でもよいわけですが。
数学カテゴリや他の質問サイトが適当では。
    • good
    • 0
この回答へのお礼

imogasiさん
早速の回答ありがとうございます。たいへん参考になりました。これを手がかりに,確認と勉強してみます。今後もいろいろ教えて下さい。感謝!感謝!です。

お礼日時:2005/09/05 18:40

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel 2007 <マクロで逆行列を求めたい>

Excel 2007 <マクロで逆行列を求めたい>


任意のn次の正方行列の逆行列をシートを介さずマクロ上のみで求めたいのです。

たとえば

Option Base 1
Sub test()
 dim a() as single
 dim b() as single
 n=5
 redim a(n,n) '行列A
 redim b(n,n) '行列B
 
 for i=1 to n
  for j=1 to n
   ....'a(i,j)に値が入る
  next j
 next i
 
 ....
 .... 'Aの逆行列の要素がBの要素になる。

End Sub 

というマクロです。
(行列Aは逆行列を持つという前提で話を進めます)

以下のサイトより、シートに値があれば、Rangeオブジェクト及びWorksheetFunctionを用いて逆行列を求められることが分かりました。

http://makotowatana.ld.infoseek.co.jp/vba_cell.html


そこでもう一歩踏み込んで、シートを介さずして逆行列の要素を、取得したいのですが、可能でしょうか?

ご存知の方よろしくお願いします。

Excel 2007 <マクロで逆行列を求めたい>


任意のn次の正方行列の逆行列をシートを介さずマクロ上のみで求めたいのです。

たとえば

Option Base 1
Sub test()
 dim a() as single
 dim b() as single
 n=5
 redim a(n,n) '行列A
 redim b(n,n) '行列B
 
 for i=1 to n
  for j=1 to n
   ....'a(i,j)に値が入る
  next j
 next i
 
 ....
 .... 'Aの逆行列の要素がBの要素になる。

End Sub 

というマクロです。
(行列Aは逆行列を持つという前提で話を進めます)

以下のサイトより、シ...続きを読む

Aベストアンサー

>「係数」及び「係数の逆行列」がRANGEではないとだめなのかという趣旨でした。
MInverse 関数の引数は、本来Range 型ではなく、N×N型の配列です。関数の中で、一旦、Range型を配列に変換していますが、2辺の長さ・高さの同じマトリックスの配列なら、そのまま入ります。

>「係数」へ行列の配列の格納方法が分かれば解決しそうです。
セルからでしたら、ループは不要です。

なお、Option Base 1を使わないのは、上位のVB.Net には存在しないので、この先、互換性に近づけるために、使わないようにしています。VBAは、当分の間変わらないとは言われていますが。VBAでは、1から始まるものは、コレクション、0から始まるものは、配列と理解していたほうが問題が少ないです。

一応、URL先のコードは、気になる部分があったので、こちらで作ってみました。ある程度、VBAが書けるようになったら、2バイト文字の変数は使いません。(開発をするような環境の人だけですが、変数など、文字化けを起こして、さっぱり分からなくなってしまうからです。また、使えない2バイト文字があると聞きますが、その内容は詳しくは知りません。)

'//
Sub Simul_Equation_Resolving()
 Dim rng As Range
 Dim rng2 As Range
 Dim Ar As Variant
 Dim Ar2 As Variant
 Dim Ret As Variant
 Dim cnt As Long

'データ(この場合は、明示的にいれたほうがよい)
 Set rng = Range("A2:C4") '係数の数値
 Set rng2 = Range("G2:G4") '右辺
 
'エラーチェック(正しければ、直接配列の準備に入れてもよい)
 If rng.Rows.Count <> rng.Columns.Count Or _
  WorksheetFunction.CountA(rng) <> WorksheetFunction.Count(rng) Or _
  WorksheetFunction.Count(rng) = 0 Then
  MsgBox "数値のみの四角形の範囲を選択してください。", vbExclamation
  Exit Sub
 End If
 If WorksheetFunction.MDeterm(rng) = 0 Then
  MsgBox "解がありません。", vbExclamation
  Exit Sub
 End If
 cnt = rng2.Rows.Count
 If rng.Rows.Count <> cnt Or _
   WorksheetFunction.Count(rng2) <> cnt Then
  MsgBox "右辺の数が違うか、並びが違うか、文字が含まれています。", vbExclamation
  Exit Sub
 End If
 '配列の準備
  Ar = rng.Value
  Ar2 = rng2.Value
 '解を求める関数
 With WorksheetFunction
  Ret = .MMult(.MInverse(Ar), Ar2)
 End With
 '出力
 If IsArray(Ret) Then
  Range("Q2").Resize(cnt).Value = Ret
 End If
 Set rng = Nothing
 Set rng2 = Nothing
End Sub
'//
URL先のコードの訂正
ThisWorkbook.Worksheets("sheet1").Activate ←これは要りません。
ReDim 係数(r, r)  'ここは不要です。

以下は間違いではありませんが、元の表の場合は、上手くありません。
r = Range("A2").End(xlDown).Row - 1 '方程式の行数
    ↓
r = Range("A2", Range("A2").End(xlDown)).Rows.Count 'このようにしたほうがよいです。

Dim 係数の行列式 As Double ←Double型にする意味がありません。入れるなら、Variant 型です。

係数の行列式 = WorksheetFunction.MDeterm(係数)
ここは実行時エラーが発生してしまいますから、間違っています。

On Error Resume Next ~ On Error Goto 0 で取ります。ただし、必ず、係数の行列式は、一旦、Empty を入れます。

>「係数」及び「係数の逆行列」がRANGEではないとだめなのかという趣旨でした。
MInverse 関数の引数は、本来Range 型ではなく、N×N型の配列です。関数の中で、一旦、Range型を配列に変換していますが、2辺の長さ・高さの同じマトリックスの配列なら、そのまま入ります。

>「係数」へ行列の配列の格納方法が分かれば解決しそうです。
セルからでしたら、ループは不要です。

なお、Option Base 1を使わないのは、上位のVB.Net には存在しないので、この先、互換性に近づけるために、使わないようにしています。VB...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Q配列の逆行列が求められない(MINVERSE関数)

添付した図を見ながらご教示いただければ幸いです。

連立方程式
3X+4y=44
2X-y=11  を

添付ファイルのように行列の積算
にしてC7セルに=MINVERSE(C4:D5)
を入力したところ、C7セルのみ計算されて
残りの3つのセルには答えが表示されません。

どうすれば残りの3つが表示されるのでしょうか?

Aベストアンサー

1. C7セルに入力する前に、C7,D7,C8,D7を選択状態にしておく
2. C7に入力したらCtrl + Shift+ Enter

これはセットで値が入るので、どこか1マスだけ消すということはできない。
俺は数式バーの式にどの位置かわからないことも含めてあまり好きではないので
INDEX関数に魅力を感じている。

http://oshiete.goo.ne.jp/qa/4179626.html

QVBA:小数点以下の数字を取得できる関数は?

VBAで、小数点以下の数字を取得できる関数または、それに必要な関数を教えていただけたらと思います。たとえば、
1.325…から0.325 
3.256224から0.256224
5.23549から0.23549を取得。
といった感じです。(取得する値はdouleで桁数は不定です。)よろしくお願いいたします。

Aベストアンサー

n - Fix(n)

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Q行列の積の計算プログラムを教えてください。

現在、BASICの勉強を独学でしていますが、なかなか理解ができないでいて困っています。
4行4列の2つの行列A、Bの積を計算するプログラムを書きたいのですが、どのように書けばよいのか教えていただけないでしょうか?
DIM文を使うことはわかるのですが、使い方がよくわからないでいます。
よろしくお願いします。

Aベストアンサー

現在の話ですから、BasicというのはVisual Basicの事だと思っていいんでしょうか?
DIM文はもともとはdimension=次元を表し、配列の宣言専門のステートメントだったと聞いた事
があります。
それはさておき、本題に入ります。

【DIM文の使い方】

変数を宣言するステートメントです。
特に配列に関しては、配列の最大の添え字を宣言できると考えた方がいいでしょう。

1)----------------------------------
(Option Base 0)※Option Baseを宣言しないと添え字を0からと解釈する。

Dim x(3) As Integer
Dim x(0 to 3) As Integer

2)----------------------------------

Option Base 1
Dim x(4) As Integer

3)----------------------------------

Dim x(1 to 4) As Integer

------------------------------------

1)~3)まで、要素を4つとるという点では差がありません。1)はx(0)が要素としてあるので要素数は4です。

2)と3)は添え字1~4をとるという意味で等価です。
1)は、添え字を0~3でとるという意味で他の二つとはちょっと違います。

以上は、一次元の配列なので、行列のような二次元以上の配列を宣言する場合には
Dim x(一次元目の添え字宣言、二次元目の添え字宣言、・・・)
となります。

実際,行列を宣言する場合には、4行4列の行列であれば、

Dim matrix(3,3)
Dim matrix(0 to 3,0 to 3)

Option Base 1
Dim matrix(4,4)
Dim matrix(1 to 4,1 to 4)

になります。

行列としてみる場合には、一次元目が行、二次元目が列です。

【行列の計算】

行列Aと行列Bの積は、Aの列数とBの行数が等しい時に計算可能です。
行列Aの成分をAlc、Bの成分をBlc、積ABの成分をClcで表すと
(Xlc l:何番目の行か、c:何番目の列か と定義します。)

Clc = Al1*B1c +Al2*B2c・・・Alx*Bxc  (xは、Aの列数とBの行数)

という式で積ABの要素は求められます。
積ABの要素Cが行(l)、列(c)の二つの項目を持っているのでそれでを特定するため、まずループ
が二重に必要です。
そしてその要素一つについて、加算のためのループが必要なので、合計ループは三重です。

試みに書いたのは、以下のような感じです。

Dim A(0 To 3, 0 To 3) As Integer
Dim B(0 To 3, 0 To 3) As Integer
Dim AB(0 To 3, 0 To 3) As Integer

Sub main()
  Dim i, j, k, sum As Integer
  Dim msg As String

  '行列の初期化処理を行う

  '行列の計算を行う
  For i = 0 To 3
    For j = 0 To 3
      sum = 0
      For k = 0 To 3
        sum = sum + A(i, k) * B(k, j)
      Next k
      AB(i, j) = sum
    Next j
  Next i

End Sub

以上、参考までに。

現在の話ですから、BasicというのはVisual Basicの事だと思っていいんでしょうか?
DIM文はもともとはdimension=次元を表し、配列の宣言専門のステートメントだったと聞いた事
があります。
それはさておき、本題に入ります。

【DIM文の使い方】

変数を宣言するステートメントです。
特に配列に関しては、配列の最大の添え字を宣言できると考えた方がいいでしょう。

1)----------------------------------
(Option Base 0)※Option Baseを宣言しないと添え字を0からと解釈する。

Dim x(3...続きを読む

QFunctionの戻り値を配列にしたいのですが

vbを始めたばかりですがよろしくお願いします。

Functionの戻り値を配列にしたいのですが

Function fnc(ByVal a As Byte, ByVal b As Byte) As Integer()
fnc(0) = a + b
fnc(1) = a - b
End Function
というような使い方はできないのでしょうか?
一つのFunctionで二つの計算結果をかえすには
どうしたらよいのでしょうか?
お願いします。

Aベストアンサー

ローカル変数を使えば可能だと思いますよ

VB6.0の場合
Function fnc( byVal a as Byte, Byval b as Byte) as Integer
  dim ar(1) as Integer
  ar(0) = a + b
  ar(1) = a - b
  fnc = ar
End Function

VB.NETなら
Function fnc( byVal a as Byte, Byval b as Byte) as Integer
  dim ar(1) as Integer
  ar(0) = a + b
  ar(1) = a - b
  return ar
End Function

VB.NETでも fnc = ar と言った記述も出来ます

呼び出し側では 動的配列として返り値を受けます
dim results() as Integer
results = fnc( 5, 3 )
と言った具合です

Q表計算で行列の積を計算する方法(OpenOffice、Excel等)

よろしくお願いします。

表計算ソフトで、行列の積を計算する方法を教えてください。

MMULT関数を使って、
=MMULT(1つ目の行列のありか, 2つ目の行列のありか)
とすることはHELPを読んだので知っているのですが、
積の計算結果を出す複数のセルに、具体的にどう記述してよいかがわかりません。

私はオープンオフィス(Microsoft Office と大体同じ機能)を使っていますが、
Microsoft Excel でも、たぶん同じやり方ではないかと思いますので、
エクセルでのやり方を知っている方からの回答もお待ちしております。

Aベストアンサー

sanoriさんなので詳細は略。

http://www.quantunet.com/excel2003/skills/sample/the_mmult_function.html

http://wiki.services.openoffice.org/wiki/Documentation/How_Tos/Calc:_MMULT_function

【Excelと違い,OpenOffice.org Calc 3.0 m21 Build 9319の検証では
F2を押した後のCtrl + Shift + Enterでは配列数式にならなかった】

【OpenOffice.org CalcではExcelと違い,引数の区切りはカンマでなくセミコロンであることにも注意】

#行列中の位置が式上に表現できないので,一見して判るものではないため,個人的にはあまり好きではないが,代替案探すのも面倒なので断念。

Qエクセルにて、3次スプラインのマクロを組みました。

エクセルにて、3次スプラインのマクロを組みました。
結果がところどころしか表示されません。
何度見直しても自分では間違いがわかりません。
どなたか、間違い箇所がわかりませんでしょうか。


A列には5行目から、0-720までの721個の少数値
0
1.005586592
2.011173184

B列には5行目から、721個の少数値
5.83
5.69
5.66

D列には5行目から、0-720まで、1ずつ増加の整数値
0
1
2

E列には補間値をマクロから代入
以下マクロです。
お手数をおかけしますが、目を通して指摘していただけませんでしょうか。

Sub 補間_3次スプライン()

Dim i As Long
Dim h(1000) As Double
Dim dif1(1000) As Double
Dim dif2(1000) As Double
Dim data_count As Long
Dim lngDataEnd As Long
Dim dataX(1000) As Double
Dim dataY(1000) As Double
Dim x, y, yy0, yy1, yy2, yy3 As Double
lngDataEnd = ThisWorkbook.Sheets("3次スプライン").Range("A65536").End(xlUp).Row
data_count = lngDataEnd - 5

For i = 1 To data_count
dataX(i) = ThisWorkbook.Sheets("3次スプライン").Cells(i + 4, 1)
dataY(i) = ThisWorkbook.Sheets("3次スプライン").Cells(i + 4, 2)
Next i

h(0) = 0
dif2(0) = 0

On Error Resume Next
For i = 1 To data_count
h(i) = dataX(i) - dataX(i - 1) '//間隔を計算
dif1(i) = (dataY(i) - dataY(i - 1)) / h(i) '//一次微分を計算
Next i

For i = 1 To data_count
'二次微分を計算
dif2(i) = (dif1(i + 1) - dif1(i)) / (dataX(i + 1) - dataX(i - 1))
Next i

i = 1
For x = 0 To 720
If x < dataX(i) Then
yy0 = dif2(i - 1) / (6 * h(i)) * (dataX(i) - x) * (dataX(i) - x) * (dataX(i) - x) '第1項
yy1 = dif2(i) / (6 * h(i)) * (x - dataX(i - 1)) * (x - dataX(i - 1)) * (x - dataX(i - 1)) '第2項
yy2 = (dataY(i - 1) / h(i) - h(i) * dif2(i - 1) / 6) * (dataX(i) - x) '第3項
yy3 = (dataY(i) / h(i) - h(i) * dif2(i) / 6) * (x - dataX(i - 1)) '第4項
y = yy0 + yy1 + yy2 + yy3
ThisWorkbook.Sheets("3次スプライン").Cells(x + 4, 5) = y
Else: i = i + 1
End If
Next x
End Sub

エクセルにて、3次スプラインのマクロを組みました。
結果がところどころしか表示されません。
何度見直しても自分では間違いがわかりません。
どなたか、間違い箇所がわかりませんでしょうか。


A列には5行目から、0-720までの721個の少数値
0
1.005586592
2.011173184

B列には5行目から、721個の少数値
5.83
5.69
5.66

D列には5行目から、0-720まで、1ずつ増加の整数値
0
1
2

E列には補間値をマクロから代入
以下マクロです。
お手数をおかけしますが、目を通して指摘していただけま...続きを読む

Aベストアンサー

3次スプラインの計算式は確認していないので、それは置いておくとして、
結果がところどころしか表示されない原因は、最後のほうの
If x < dataX(i) Then
の部分ではないでしょうか。
この方法では、「If x < dataX(i) Then」を満たさなければ、そのxの行は表示されません。

次のようにしてはどうですか。

i = 1
For x = 0 To 720
Do Until x < dataX(i)
i = i + 1
If i > data_count Then Exit Do
Loop
If i > data_count Then Exit For
yy1 = ・・・・・
・・・・・・・
ThisWorkbook.Sheets("3次スプライン").Cells(x + 4, 5) = y
Next x

Qバッチでテキストファイルから任意の行のみ取得したい

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数Textに入れる(set Text=222)
4.変数Textを使用し色々処理をする
-----------------------------------------
コレを繰り返します。
2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。
n行目を全て取り出す方法がわかれば行けると思うのですが、
どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数T...続きを読む

Aベストアンサー

No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず?

findstr /n /r "." a.txt | findstr /r "^3:"

で3行目を表示してくれます。え!? それだけ。そうなんです

ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか?

となる。結局 for 文を使いまわす事になります。

まあ、適当に改変して、上記の問題を解決してください。


人気Q&Aランキング