Avatar billede frederik_kromann Nybegynder
28. september 2005 - 22:39 Der er 6 kommentarer og
1 løsning

Omdanne matrix til tabel

Jeg har et lille problem. Jeg har en tabel med datoer ud af X-aksen og projekter ned af y-aksen. I matrixen er så plottet antal timer ind i forhold til dato og projekt.

Da jeg har behov for at behandle disse data i en pivottabel har jeg behov for en tabel hvor en række kun indeholder følgende: dato, projekt, tid. Som det ser ud nu er det: projekt og timer for alle månedens dage. Er det noget der kan lade sig gøre?
Avatar billede bak Forsker
28. september 2005 - 22:51 #1
prøv denne makro. Kør den og marker hele matrixen når du bliver spurgt

Sub liste()
Dim rnga As Range
Dim rngb As Range
Dim rngc As Range
Dim listen()
Dim y As Long, x As Long

y = 0
Set rnga = Application.InputBox(prompt:="hvilket område skal listes?", Type:=8)
Set rngb = rnga.Offset(1, 1).Resize(rnga.Rows.Count - 1, rnga.Columns.Count - 1)
x = Application.WorksheetFunction.CountA(rngb)
ReDim listen(x, 3)
For Each c In rngb
  y = y + 1
  listen(y, 1) = Cells(c.Row, rnga.Column).Value
  listen(y, 2) = Cells(rnga.Row, c.Column).Value
  listen(y, 3) = c.Value
Next
Set rngc = Application.InputBox(prompt:="Hvortil ?", Type:=8)

rngc.Resize(x, 3) = listen

End Sub
Avatar billede bak Forsker
29. september 2005 - 08:38 #2
Glemte lige at skrive at øverst i modulet skal der stå
Option Base 1
ellers får du kun to kolonner
Avatar billede bak Forsker
29. september 2005 - 08:52 #3
her er en lidt forbedret version, hvor det ikke er nødvendigt med option base 1 og den tager højde for at der kan være tomme celler.

Sub Matrix2List()
  Dim rgMatrixTotal As Range
  Dim rgMatrixData As Range
  Dim rgMatrixOutput As Range
  Dim rgCell As Range
  Dim vaList()
  Dim y As Long
  Dim x As Long

  y = 0

  Set rgMatrixTotal = Application.InputBox(prompt:="Hvilket område skal listes?", Type:=8)
  With rgMatrixTotal
      Set rgMatrixData = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
      x = rgMatrixData.Cells.Count
      ReDim vaList(0 To x, 0 To 2)
      For Each rgCell In rgMatrixData
        vaList(y, 0) = Cells(rgCell.Row, .Column).Value
        vaList(y, 1) = Cells(.Row, rgCell.Column).Value
        vaList(y, 2) = rgCell.Value
        y = y + 1
      Next
  End With
  Set rgMatrixOutput = Application.InputBox(prompt:="Indsættes hvor ?", Type:=8)

  rgMatrixOutput.Resize(x, 3) = vaList

End Sub
Avatar billede frederik_kromann Nybegynder
29. september 2005 - 13:32 #4
Wow den var sej. Hvis du har mulighed for at bytte om så datoen kommer før projektnummeret samt at den udover blanke heller ikke tager værdien 0 med, så køber jeg den sgu.
Avatar billede bak Forsker
29. september 2005 - 14:45 #5
Sub Matrix2List()
  Dim rgMatrixTotal As Range
  Dim rgMatrixData As Range
  Dim rgMatrixOutput As Range
  Dim rgCell As Range
  Dim vaList()
  Dim y As Long
  Dim x As Long

  y = 0

  Set rgMatrixTotal = Application.InputBox(prompt:="Hvilket område skal listes?", Type:=8)
  With rgMatrixTotal
      Set rgMatrixData = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
      x = rgMatrixData.Cells.Count
      ReDim vaList(0 To x, 0 To 2)
      For Each rgCell In rgMatrixData
        If Not CSng(rgCell) = 0 Then
        vaList(y, 1) = Cells(rgCell.Row, .Column).Value
        vaList(y, 0) = Cells(.Row, rgCell.Column).Value
        vaList(y, 2) = rgCell.Value
        y = y + 1
        End If
      Next
  End With
  Set rgMatrixOutput = Application.InputBox(prompt:="Indsættes hvor ?", Type:=8)

  rgMatrixOutput.Resize(x, 3) = vaList

End Sub
Avatar billede frederik_kromann Nybegynder
30. september 2005 - 08:26 #6
Det funker 100% perfekt. Det er alle tiders. Måske jeg skulle sætte mig lidt mere ind i det der VBA, det ser ud til at sparke røv. Hvis man vel og mærke kan bruge det. Send mig et svar så lukker vi den sag.
Avatar billede bak Forsker
30. september 2005 - 10:03 #7
ok :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel