2016-08-31 7 views
1

私は2つの.csvファイルを持っています - 目で見れば同じですが、それらについては別のものが必要です。 最初のものからのデータが私のtext-to-columnsマクロに当たったとき、その部分の列(最初の39)についてのみ、部分をスキップします(40から終わりに行く)。これは、2番目の.csvのデータには発生しません。ここでVBAのテキストはすべてのデータを解析していません

は(彼らは2つの異なるデータベースから生成されている)の両方からのデータのサンプルです:

注:ここでは

QRT NAME;REPORTING YEAR /;SOLVENCY CALCULA;LEGAL NAME OF TH;HOME COUNTRY;REPORTING CURREN;PORTFOLIO TYPE;ASSET HELD IN UN;PORTFOLIO;LINE ID;ID CODE;ID CODE TYPE;ID CODE LONG TEX;ORIGINAL CURRENC;ISSUER;ISSUER MIDDLE TE;ISSUER SECTOR;ISSUER COUNTRY;ISSUER CODE;ISSUER GROUP;ISSUER GROUP MID;PARTICIPATION;CUSTODIAN;CUSTODIAN MIDDLE;COUNTRY OF CUSTO;CIC ASSET CATEGO;CIC SUB ASSET CA;ASSETS SUBCLASS;TYPE OF SECURITY;TYPE OF COLLATER;BALANCE SHEET IT;EQUITY TYPE;RATING AGENCY;EXTERNAL RATING;MATURITY DATE;DURATION;VALUATION METHOD;QUANTITY;TOTAL PAR AMOUNT;UNIT SII PRICE;PERCENTAGE OF PA;ACCRUED INTEREST;TOTAL SII AMOUNT;ACQUISITION PRIC;WRITE-OFFS/WRITE;TOTAL AMOUNT LOC;IFRS ACCOUNTING;CLEAN VALUE IN O;DIRTY VALUE IN O;EXPOSURE IN ORIG;EQUITY;PROPERTY;FX RISK (DOWNSID;FX RISK (UPSIDE;INTEREST RATE (D;INTEREST RATE (U;SPREAD RISK BOND;SPREAD RISK STRU;SPREAD RISK DERI;;USE OF DERIVATIV;LONG OR SHORT PO;UNWIND TRIGGER O;TRADE DATE;PREMIUM PAID TO;PREMIUM RECEIVED;SWAP OUTFLOW AMO;SWAP DELIVERED C;SWAP INFLOW AMOU;SWAP RECEIVED CU;TRIGGER VALUE;DELTA;NUMBER OF CONTRA;CONTRACT DIMENSI;NOTIONAL AMOUNT;MAXIMUM LOSS UND;ASSET PLEDGED AS;FUND NUMBER;MATCHING PORTFOL;CURRENT INTEREST;INTEREST RATE FR;REDEMPTION;REFERENCE RATE L;FIXING FACTOR;FIXING SPREAD;QUOTATION TYPE;INTEREST RATE TY;REDEMPTION TYPE;QUOTED;LISTING COUNTRY;ANNUITY/INSTALLM;DISCOUNTING SPRE;FUNDS: FIXED INC;FUNDS: EQUITY QU;FUNDS: PROPERTY;FUNDS: CASH QUOT;FUNDS: ALTERNATI;FUNDS: FX-QUOTA;FUNDS: SPREAD DU;FUNDS: DURATION;BALANCE SHEET IT; 
S.06.02.01;006.2016;M1;C;PL;PLN;L;N;LF_COMP;1;PLOPNPL00013;ISIN;X SA;PLN;9978;X;G47;PL;2594002C0DGL8KBA5491;18284;X;N;9448;ING BANK SLASKI;PL;3;PL31;EQ-STOCKS;Equity;NA;EQUI-EQUI;TYPE1;;;;;QMP;4900,000000;;31,470000;;0,000000;154203,000000;160424,170000;;;154203,000000;154203,000000;154203,000000;;49098,510000;0,000000;0,000000;0,000000;0,000000;0,000000;0,000000;;;;;;U;;;;;;;;;;;;;;NC;;;;0,00;;0,00;;;Per unit;;;Quoted;PL;;;;;;;;;;;31; 
S.06.02.01;006.2016;M1;C;PL;PLN;L;N;LF_COMP;3;PL_CLF_PLN_BRE§2510;CAU;TD_PL_CLF_BRE BANK_PLN;PLN;9357;MBANK;K64.1.9;PL;259400DZXF7UJKK2AY35;727;COMMERZBANK;;9357;MBANK;PL;7;XT73;CASH-TD;Deposit;FIN-SEN;CASH-CASH;TYPE2;MDY;BBB;30.12.2016;0,500000;AVM;;448000,000000;;1,000000;4963,960000;452963,960000;;;;448000,000000;448000,000000;452963,960000;;0,000000;0,000000;0,000000;0,000000;-2655,240000;2436,920000;0,000000;;;;;;U;;;;;;;;;;;;;;NC;;;0,02210;0,00;;0,00;;;Percent;;;(none);;;;;;;;;;;;41; 


QRT NAME;REPORTING YEAR /;SOLVENCY CALCULA;LEGAL NAME OF TH;HOME COUNTRY;REPORTING CURREN;PORTFOLIO TYPE;ASSET HELD IN UN;PORTFOLIO;LINE ID;ID CODE;ID CODE TYPE;ID CODE LONG TEX;ORIGINAL CURRENC;ISSUER;ISSUER MIDDLE TE;ISSUER SECTOR;ISSUER COUNTRY;ISSUER CODE;ISSUER GROUP;ISSUER GROUP MID;PARTICIPATION;CUSTODIAN;CUSTODIAN MIDDLE;COUNTRY OF CUSTO;CIC ASSET CATEGO;CIC SUB ASSET CA;ASSETS SUBCLASS;TYPE OF SECURITY;TYPE OF COLLATER;BALANCE SHEET IT;EQUITY TYPE;RATING AGENCY;EXTERNAL RATING;MATURITY DATE;DURATION;VALUATION METHOD;QUANTITY;TOTAL PAR AMOUNT;UNIT SII PRICE;PERCENTAGE OF PA;ACCRUED INTEREST;TOTAL SII AMOUNT;ACQUISITION PRIC;WRITE-OFFS/WRITE;TOTAL AMOUNT LOC;IFRS ACCOUNTING;CLEAN VALUE IN O;DIRTY VALUE IN O;EXPOSURE IN ORIG;EQUITY;PROPERTY;FX RISK (DOWNSID;FX RISK (UPSIDE;INTEREST RATE (D;INTEREST RATE (U;SPREAD RISK BOND;SPREAD RISK STRU;SPREAD RISK DERI;;USE OF DERIVATIV;LONG OR SHORT PO;UNWIND TRIGGER O;TRADE DATE;PREMIUM PAID TO;PREMIUM RECEIVED;SWAP OUTFLOW AMO;SWAP DELIVERED C;SWAP INFLOW AMOU;SWAP RECEIVED CU;TRIGGER VALUE;DELTA;NUMBER OF CONTRA;CONTRACT DIMENSI;NOTIONAL AMOUNT;MAXIMUM LOSS UND;ASSET PLEDGED AS;FUND NUMBER;MATCHING PORTFOL;CURRENT INTEREST;INTEREST RATE FR;REDEMPTION;REFERENCE RATE L;FIXING FACTOR;FIXING SPREAD;QUOTATION TYPE;INTEREST RATE TY;REDEMPTION TYPE;QUOTED;LISTING COUNTRY;ANNUITY/INSTALLM;DISCOUNTING SPRE;FUNDS: FIXED INC;FUNDS: EQUITY QU;FUNDS: PROPERTY;FUNDS: CASH QUOT;FUNDS: ALTERNATI;FUNDS: FX-QUOTA;FUNDS: SPREAD DU;FUNDS: DURATION;BALANCE SHEET IT; 
S.06.02.01;006.2016;M1;C;PL;PLN;L;N;LF_COMP;1;PLOPNPL00013;ISIN;X SA;PLN;9978;X;G47;PL;2594002C0DGL8KBA5491;18284;X;N;9448;ING BANK SLASKI;PL;3;PL31;EQ-STOCKS;Equity;NA;EQUI-EQUI;TYPE1;;;;;QMP;4900,000000;;31,470000;;0,000000;154203,000000;160424,170000;;;154203,000000;154203,000000;154203,000000;;49098,510000;0,000000;0,000000;0,000000;0,000000;0,000000;0,000000;;;;;;U;;;;;;;;;;;;;;NC;;;;0,00;;0,00;;;Per unit;;;Quoted;PL;;;;;;;;;;;31; 
S.06.02.01;006.2016;M1;C;PL;PLN;L;N;LF_COMP;3;PL_CLF_PLN_BRE§2510;CAU;TD_PL_CLF_BRE BANK_PLN;PLN;9357;MBANK;K64.1.9;PL;259400DZXF7UJKK2AY35;727;COMMERZBANK;;9357;MBANK;PL;7;XT73;CASH-TD;Deposit;FIN-SEN;CASH-CASH;TYPE2;MDY;BBB;30.12.2016;0,500000;AVM;;448000,000000;;1,000000;4963,960000;452963,960000;;;;448000,000000;448000,000000;452963,960000;;0,000000;0,000000;0,000000;0,000000;-2655,240000;2436,920000;0,000000;;;;;;U;;;;;;;;;;;;;;NC;;;0,02210;0,00;;0,00;;;Percent;;;(none);;;;;;;;;;;;41; 

は、私が使用したテキスト・ツー・コラム式は次のとおりです。私はapprecたいコードで行うことができる何かがあればデータは、テキストツー列ParamBook

Public Sub Load_input() 

InputPath = Application.GetOpenFilename("Comma Separated Values (*.csv),*.csv") 

Call Fetch_Data 

End Sub 


Sub Fetch_Data() 
    Dim InputBook As Workbook 
    Dim ParamBook As Workbook 
    Dim n As Integer 
    Dim K As Integer 
    Set InputBook = Workbooks.Open(InputPath) 
    Set ParamBook = ThisWorkbook 


    '==========CLEAR CONTENTS OF DATA SHEET========== 
    If ParamBook.Sheets("Data").Cells(1, 1) <> "" Then 
     ParamBook.Sheets("Data").Cells.Clear 
    End If 

'==========COPY INPUT AND PASTE INTO DATA SHEET========== 
n = InputBook.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row 
InputBook.Activate 
InputBook.Sheets(1).Range(Cells(1, 1), Cells(n, 1)).Select 
Selection.Copy 
ParamBook.Activate 
Application.DisplayAlerts = False 
ActiveSheet.Paste Destination:=Worksheets("Data").Range("A1") 


'==========TEXT TO COLUMSN IN DATA SHEET========== 
K = ParamBook.Sheets("Data").Cells(Rows.Count, "A").End(xlUp).Row 
ThisWorkbook.Sheets("Data").Activate 
For K = 1 To K 
    Application.DisplayAlerts = False 
    ThisWorkbook.Sheets("Data").Cells(K, 1).Select 
    Selection.TextToColumns DataType:=xlDelimited, Semicolon:=True, Comma:=False 
Next K 


InputBook.Close 
End Sub 

で起こるInputBookからコピーされますいくつかのヒントをiateして、私はむしろ.csvファイルがどのように生成されるのか混乱しないだろう。

編集:このテキスト・ツー・コラムコードはちょうどより速く動作しますが、まだ同じ問題

'==========TEXT TO COLUMSN IN SAP_BW_DATA SHEET========== 
K = ParamBook.Sheets("SAP BW Data").Cells(Rows.Count, "A").End(xlUp).Row 
ThisWorkbook.Sheets("SAP BW Data").Activate 
    ThisWorkbook.Sheets("SAP BW Data").Range(Cells(1, 1), Cells(K, 1)).Select 
    Selection.TextToColumns DataType:=xlDelimited, Semicolon:=True, Comma:=False 

編集2:

OK、私はそれを絞られている - 結局のところ、問題は、TTCの機能と位置していないが、方法は、データを.csvファイルから貼り付けられます。現在設定されている方法では、データの一部(テキストとコラムになっている同じ部分)だけを取得し、残りはペーストされません。それを解決することが問題の解決に役立ちます。助けに参加してくれてありがとう!

編集3:

問題を修正しました@cxwは、彼のポストを参照してください!

+0

*一部の列についてのみ*を明らかにすることはできますか?列の一部(つまり、いくつかの行)が解析されていないか、一部の列では動作していて他の列では動作していないことを意味しますか? – pnuts

+1

私が意味することは、それが一度40列目に当たったら、最初の行以外のデータはありません。のように、列40から最後の右に、それはすべて空です。 –

+0

データ*がそこにありますが、それよりはるかに右側にあります(つまり、コンテンツがなく、その後多くのデータを持つ列がたくさんあります)?あなたは連続した区切り文字を1つとみなしましたか? – pnuts

答えて

0

OK —もう一度試してみましょう。明らかな答えがうまくいかなかったら、入力を確認してください。

Set InputBook = Workbooks.Open(InputPath) 

InputPathがデフォルトモードで開きます。あなたはこれらの "csv"ファイルを呼び出しましたが、実際にはマクロごとにセミコロンが区切られています。私は2つのファイルが異なる拡張子を持っていると思われ、問題のあるファイルは*.csvです。はい?

私はExcel 2013のインストールでこれを試しました。上記の最初のテストケースを含む*.csvファイルに上記の行を実行すると、Excelはそのファイルをカンマで区切って列に分割します。したがって、InputBookのデータは列A:Sに渡されるため、コードAから抜け出すだけではすべてのデータが取得されません。これを修正するために、私は

Set InputBook = Workbooks.Open(InputPath, format:=5) 

書式5を使用することはdocsあたりの「デリミタ」ではありません。私がそれをするとき、私は各列を列Aで完全に取得し、テキストから列への手動操作が機能します。

編集はい、延長は問題ありません:私は.csvから.txtに私のテストファイルの名前を変更すると、通常のWorkbooks.Open列を分割しません指定されていない形式で。

+0

これはそれでした。帽子はあなたに:)このファイルは実際セミコロンで区切られており、この小さな変更がすべて正しいものになります。 –

+0

@DaveRそれを聞いてうれしい!ちなみに、あなたがオンラインになっている間、[ツアー](https://stackoverflow.com/tour)で、サイトと人々が質問で探しているものについての詳細を確認してください。楽しい! – cxw

0

actual answerを参照してください。

問題はおそらく、この行です:

For K = 1 To K 

あなたは:)欲しいものはほとんど決してあなたループ、ループとしてバインドを変更しています。 (修正Comintern's comment belowを参照してください。)(あなたは柔軟な境界を望んでいた場合は、Doループがより良い選択である。)

LastRow = ParamBook.Sheets("Data").Cells(Rows.Count, "A").End(xlUp).Row 
ThisWorkbook.Sheets("Data").Activate ' <--- should this reference ParamBook? 
Dim CurrentRow as Long 
Application.DisplayAlerts = False ' move out of the loop for speed 
For CurrentRow = 1 To LastRow 
    ThisWorkbook.Sheets("Data").Cells(CurrentRow, 1).Select 
    Selection.TextToColumns DataType:=xlDelimited, Semicolon:=True, Comma:=False 
Next CurrentRow 

を試してみてください。また、あなたの現在のコードがワークブック参照:InputBookParamBook、およびThisWorkbookを(マクロがどこにあるか)。 ParamBookThisWorkbookのコピーに初期化してあります。私はParamBookを使い続けることをお勧めします。後で必要がある場合は、アドインにコードを移植するのが簡単になります。

+0

あなたのご意見ありがとうございます。ループの継続中にループバインドを変更することについての素晴らしいコメントがあります。将来はそのことをやめます。残念なことに、いくつかの不可解な理由のために - 問題は続く。 –

+1

forループが開始された後、ループ境界は決して変更されません。'For K = 1〜K 'の* real *の問題は、左から右へと評価されるため、ループ(1)の初期値に' K'を設定し、*を使ってループバインドを設定します。 Kに何が入っているかにかかわらず、常にFor K = 1〜1になります。 – Comintern

+0

@Cominternありがとう - 私は微妙なことは分かっていない(自分で試したことはありません...少なくとも目的はありません;)) – cxw

関連する問題