1

数式をセルに入力し、vlookup数式を最後の行に入力してから、数式を範囲全体にコピーするサブを作成しようとしpastespecial->valuesています。私が使用するテーブルvLookupは、常に同じ場所に保存されているとは限らない別のファイルにあります。テーブルは常に同じようにフォーマットされますが、テーブルのサイズは常に同じではありません。

これを 4 つの異なるワークシートで行う必要があり、この式を入力する必要がある列には「注文グレード」という見出しがあります。.Find を使用して、「注文グレード」の場所を返します。次に、「注文グレード」が見つかった場所の下に Vlookup 1 行を入力します。

ワークシートに数式を手動で入力すると、次のようになります。

=VLOOKUP(C2,[newpipe.xlsx]Sheet1!$A$1:$B$376,2,FALSE)    

VBAでは、作成したい数式は次のようになります。

=vlookup(RC[-1],stringFileName\[newpipe.xlsx]Sheet1!$A$1:LastColumn & LastRow,2,False

ユーザーがファイルを開くダイアログ ボックスを使用して stringFileName を選択した場合。選択したシートの LastColumn と LastRow は、マクロで計算する必要があります。

これが私がこれまでに持っているものです。

Private Function UseFileDialogOpen()
Dim myString As String
' Open the file dialog
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = False
    .Show
    If .SelectedItems.Count = 1 Then
        myString = .SelectedItems(1)
        'MsgBox myString
        UseFileDialogOpen = myString
    Else
        MsgBox ("Failed to properly open file")
        myString = "fail"
        UseFileDialogOpen = myString
    End If
End With
End Function

Sub formatOrderColumn()
Dim strSearch
Dim foundColumn
Dim foundRow
Dim RowBelowSpotFound
Dim fileLocation

strSearch = "Order Grade"

Set aCell = ActiveSheet.Rows(1).Find(what:=strSearch, LookIn:=xlValues, _
Lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False)

If Not aCell Is Nothing Then
    foundColumn = aCell.Column
    foundRow = aCell.Row
    spotFound = ColumnLetter(foundColumn) & foundRow + 1
'    MsgBox "Value Found in Row " & foundRow & _
    " and the Column Number is " & foundColumn
Else
    Exit Sub
End If

fileLocation = UseFileDialogOpen()
LastColumn = FindLastColumn(UserSelectedSheet)
LastRow = FindLastRow(UserSelectedSheet)
Range(RowBelowSpotFound).Formula = _
    "=vlookup(RC[-1], [" & fileLocation & "]Sheet1!$A$1:" & LastColumn & lastrow & ",2,False"
End Sub

ユーザーが選択したファイルから lastrow と lastColumn を取得する方法がわかりません。渡されたワークシートに対してそれを行う関数があります。私は自分の状況を説明するのにかなり下手な仕事をしたことを認識しており、これが最善の方法であるとはまったく確信が持てません. ご不明な点がございましたら、お気軽にお問い合わせください。明確にするために最善を尽くします。もうすぐ会社を出ますので、朝までお返事できないかもしれません。

ここに新しい式があります。オフセットセル数式を文字列値に設定しようとすると、最後の行でエラーが発生します。文字列値は正しいです。最初に文字列を作成するために mystring ホルダーを使用せずにセル値を直接設定しようとすると、同じエラーが発生します。「アプリケーションまたはオブジェクト定義エラー」

Sub vlookupOrderGrade()

Dim strSearch
Dim fileLocation
Dim aCell As Range
Dim aCellString
Dim myString As String
strSearch = "Order Grade"

Set aCell = ActiveSheet.Rows(1).Find(what:=strSearch, LookIn:=xlValues, _
                                 Lookat:=xlWhole, MatchCase:=True)
If Not aCell Is Nothing Then
    fileLocation = UseFileDialogOpen()
    If fileLocation <> "fail" Then
        'replace last "\" with a "["
        fileLocation = StrReverse(fileLocation)
        fileLocation = Replace(fileLocation, "\", "[", 1, 1)
        fileLocation = StrReverse(fileLocation)
        'build string
        myString = "=vlookup(" & _
                     ColumnLetter(aCell.Column - 1) & aCell.Row + 1 & _
                     ", '" & fileLocation & "]Sheet1'!$A:$B,2,False"
        MsgBox (myString)
        'set cell to string
        aCell.Offset(1, 0).Formula = myString
    End If
Else
    Exit Sub
End If
End Sub
4

1 に答える 1

0

未テスト:

Sub formatOrderColumn()

Dim strSearch
Dim fileLocation

strSearch = "Order Grade"

Set aCell = ActiveSheet.Rows(1).Find(what:=strSearch, LookIn:=xlValues, _
                                     Lookat:=xlWhole, MatchCase:=True)

    If Not aCell Is Nothing Then

        fileLocation = UseFileDialogOpen()
        If fileLocation <> "fail" Then

            aCell.Offset(1, 0).Formula = "=vlookup(" & _
                         aCell.Offset(1, -1).Address(False, False) & _
                         ", '[" & fileLocation & "]Sheet1'!$A:$B,2,False"
        End If
    Else
        Exit Sub
    End If

End Sub
于 2013-10-23T17:18:49.257 に答える