|
▼なおやん さん、とまとさん
こんばんは。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=28279;id=excel
のコードをほんのちょっとの変更だけで出来そうだったので
既に解決したようですが、投稿しました。
>週 果物
>1週目 りんご
>1週目 りんご
>1週目 みかん
>2週目 りんご
>2週目 みかん
>3週目 ぶどう
>3週目 バナナ
>3週目 バナナ
↑のデータがSheet1のA列1行目から入力されているとします。
>
> りんご みかん ぶどう ばなな
>1週目 2 1 0 0
>2週目 1 1 0 0
>3週目 0 0 1 2
↑は、Sheet2とすると、
標準モジュールに
'=============================================
Sub test()
Dim rs As Object
Dim mysql As String
If open_ado_excel(ThisWorkbook.FullName) = 0 Then
mysql = "Transform iif(isnull(Count(果物)),0,Count(果物)) " & _
"Select 週 From [Sheet1$] Group By 週 " & _
"Pivot 果物;"
If get_exec_sql(mysql, rs) = 0 Then
With Worksheets("Sheet2")
.Cells.ClearContents
.Range("a2").CopyFromRecordset rs
For idx = 0 To rs.fields.Count - 1
.Cells(1, idx + 1).Value = rs.fields(idx).Name
Next
End With
Call rs_close(rs)
Else
MsgBox "rs error"
End If
Call close_ado
Else
MsgBox "cn error"
End If
End Sub
別の標準モジュールに
(こっちは、リンク先のコードと全く同じですが)
'=========================================================
Public cn As Object
'=========================================================
Function open_ado_excel(book_fullname As String) As Long
On Error Resume Next
link_opt = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & book_fullname & ";" & _
"Extended Properties=Excel 8.0;"
Set cn = CreateObject("ADODB.Connection")
cn.Open link_opt
open_ado_excel = Err.Number
On Error GoTo 0
End Function
'=========================================================
Sub close_ado()
On Error Resume Next
cn.Close
On Error GoTo 0
End Sub
'=========================================================
Function get_exec_sql(sql_str, rs As Object) As Long
On Error Resume Next
Set rs = cn.Execute(sql_str)
get_exec_sql = Err.Number
On Error GoTo 0
End Function
'=========================================================
Sub rs_close(rs As Object)
On Error Resume Next
rs.Close
On Error GoTo 0
End Sub
以上です。
一度このブックを保存してから
プロシジャーtestを実行して見て下さい。
|
|