2017-02-08 3 views
0

だから、私は、誰かが私の前に、これらのマクロと同等に使用していたことを、このExcelの機能をオンにして私を助けることを期待していた。そこは同等VBAには、この場合は(Mid関数を回すように見えることはできません

いくつかの機能がありますが、ここではマクロを見てみるとすばやく出会うように見えるので、ここでは2〜3つを挙げていきます。

ちょっとしたバックストーリーは、最初はtxtレポートをA列にコピーし、列BからOは、Aの行をソートし、次の関数のいくつかを使用してピースを取り出すことになります。

=IF(MID(A6,60,1)="=",MID(A6,52,15),IF(MID(A6,57,1)="=",MID(A6,53,8),C1)) 

=IF(A2="","-",IF(LEFT(A2,1)="1","pg","-")) 

ここで私が仕事に使っているテストレポートのスナップショットです。

Mock Report

私は、可能な場合は、ループの各式と(原因ヘッダーへの)A2から始まるのSheet2に送信列を、その後コピーA1に貼り付け、コピーの段階を経るないしたいと思いますBからOを選び、 " - "を並べ替えます。

マクロをレコーディングして式を入力してみましたが、どうやってそれを実現させるのかを知ることができませんでした。

ご協力いただければ幸いです!

+1

これは、数式を使用する代わりに完全なVBAより優れていると思います。 – PatricK

+0

私は@PatricKに同意するのは、おそらく 'InStr'、' If'と 'Select Case'関数を使って式をマクロとして書き直す方が良いということです。 – Jordan

+0

"A6"に等号が1つしかないことが予想される場合は、instr関数を使用することは間違いなく簡単です。つまり、inst(1、range( "a6")。value、 "=")= 60 then ... –

答えて

0
Sub convert() 
Dim ws As Worksheet, thisRng As Range 
Set ws = Sheet1 
Set thisRng = Sheet1.Range("B1")' Select the cell to place data into 

' Break up the formula logically first and it becomes easier to convert 
' =IF (MID(A6,60,1)="=",  MID(A6,52,15), else if IF(MID(A6,57,1)="=",  MID(A6,53,8),  else C1)) 
If Mid(ws.Range("A6").Value, 60, 1) = "=" Then 
    thisRng = Mid(ws.Range("A6").Value, 52, 15) 
    Else 
     If (Mid(ws.Range("A6").Value, 57, 1)) = "=" Then 
      thisRng = Mid(ws.Range("A6").Value, 53, 8) 
     Else 
      thisRng.Value = ws.Range("C1").Value 
     End If 
End If 

End Sub 
+0

これは素晴らしい仕事でした。 –

+0

それは答えですか?もしそうなら、それを+1することを忘れないでください。 –

関連する問題