Transpose data in Excel

Katchap902

New Member
Joined
Feb 2, 2022
Messages
8
Office Version
  1. 365
Platform
  1. Windows
Hi Everyone,
I have some complex data in a table I want to transpose in excel. In the table below I want take the 'element' column and transpose it so each individual element is listed as a column number per sample tag. The first image is how the data is currently presented and the second image is how I want it displayed . I have 100000's of records to do this for.....
1643857176359.png


1643857777750.png
 

Excel Facts

Get help while writing formula
Click the italics "fx" icon to the left of the formula bar to open the Functions Arguments dialog. Help is displayed for each argument.
something easy for a macro (VBA) or PQ in your 365-version.
Can you give a few real lines with the XL2BB-tool ?
Is the number of rows per sample tag always the same ?
 
Upvote 0
Thanks for you reply :) the number of rows per sample are not always the same and in some cases the elements also change making this tricky.

See the mini sheet below

LFView666.xlsx
ABCDEFGH
2ATAZT00237535271.254As6ppm
3ATAZT00237535271.254Co78ppm
4ATAZT00237535271.254Cr386ppm
5ATAZT00237535271.254Cu3ppm
6ATAZT00237535271.254FeO4.47PERCENT
7ATAZT00237535271.254Ni2199ppm
8ATAZT00237535271.254Pb17ppm
9ATAZT00237535271.254Zn213ppm
10ATAZT00237535271.254Ag<1ppm
11ATAZT002375352846.95Zn116ppm
12ATAZT002375352846.95Co69ppm
13ATAZT002375352846.95As3ppm
14ATAZT002375352846.95Cr277ppm
15ATAZT002375352846.95Cu5ppm
16ATAZT002375352846.95FeO3.4PERCENT
17ATAZT002375352846.95Pb14ppm
18ATAZT002375352846.95Ag<1ppm
19ATAZT002375352846.95Ni1756ppm
20ATAZT00237535296.958.2As9ppm
21ATAZT00237535296.958.2Ni1273ppm
22ATAZT00237535296.958.2Cr524ppm
23ATAZT00237535296.958.2Ag<1ppm
24ATAZT00237535296.958.2Zn74ppm
25ATAZT00237535296.958.2Cu4ppm
26ATAZT00237535296.958.2Pb7ppm
27ATAZT00237535296.958.2FeO454PERCENT
28ATAZT00237535296.958.2Co43ppm
29ATAZT00237535308.29.95FeO4.14PERCENT
30ATAZT00237535308.29.95Cu2ppm
31ATAZT00237535308.29.95Ag<1ppm
32ATAZT00237535308.29.95As8ppm
33ATAZT00237535308.29.95Cr345ppm
34ATAZT00237535308.29.95Ni1376ppm
35ATAZT00237535308.29.95Pb8ppm
36ATAZT00237535308.29.95Co52ppm
37ATAZT00237535308.29.95Zn131ppm
38ATAZT00237535319.9510.7Co49ppm
39ATAZT00237535319.9510.7FeO7.49PERCENT
40ATAZT00237535319.9510.7Ag<1ppm
41ATAZT00237535319.9510.7Cr366ppm
42ATAZT00237535319.9510.7Ni1431ppm
43ATAZT00237535319.9510.7Cu2ppm
44ATAZT00237535319.9510.7Pb7ppm
45ATAZT00237535319.9510.7As11ppm
46ATAZT00237535319.9510.7Zn112ppm
47ATAZT002375353210.714.1Ni1631ppm
48ATAZT002375353210.714.1FeO4.31PERCENT
49ATAZT002375353210.714.1Cu5ppm
50ATAZT002375353210.714.1Cr226ppm
51ATAZT002375353210.714.1As5ppm
52ATAZT002375353210.714.1Ag<1ppm
53ATAZT002375353210.714.1Zn123ppm
54ATAZT002375353210.714.1Pb9ppm
55ATAZT002375353210.714.1Co57ppm
56ATAZT002375353314.117.7Co66ppm
57ATAZT002375353314.117.7Ni1693ppm
58ATAZT002375353314.117.7FeO4.32PERCENT
59ATAZT002375353314.117.7Zn134ppm
60ATAZT002375353314.117.7Cr205ppm
61ATAZT002375353314.117.7As7ppm
62ATAZT002375353314.117.7Ag<1ppm
63ATAZT002375353314.117.7Pb7ppm
64ATAZT002375353314.117.7Cu2ppm
65ATAZT002375353417.719.8Cr303ppm
66ATAZT002375353417.719.8Ag<1ppm
67ATAZT002375353417.719.8As4ppm
68ATAZT002375353417.719.8Co73ppm
69ATAZT002375353417.719.8FeO4.61PERCENT
70ATAZT002375353417.719.8Ni1551ppm
71ATAZT002375353417.719.8Zn158ppm
72ATAZT002375353417.719.8Pb8ppm
73ATAZT002375353417.719.8Cu2ppm
74ATAZT002375353519.821.05Pb8ppm
75ATAZT002375353519.821.05Cr277ppm
76ATAZT002375353519.821.05Ag<1ppm
77ATAZT002375353519.821.05As4ppm
78ATAZT002375353519.821.05Ni1391ppm
79ATAZT002375353519.821.05Zn142ppm
80ATAZT002375353519.821.05Cu2ppm
81ATAZT002375353519.821.05FeO3.69PERCENT
82ATAZT002375353519.821.05Co58ppm
83ATAZT002375353621.0522As6ppm
84ATAZT002375353621.0522Pb5ppm
85ATAZT002375353621.0522Zn145ppm
86ATAZT002375353621.0522Cr273ppm
87ATAZT002375353621.0522Ag<1ppm
88ATAZT002375353621.0522Ni1616ppm
89ATAZT002375353621.0522FeO3.94PERCENT
90ATAZT002375353621.0522Cu2ppm
91ATAZT002375353621.0522Co66ppm
92ATAZT00237535372223.3Ni1579ppm
93ATAZT00237535372223.3Ag<1ppm
94ATAZT00237535372223.3As2ppm
95ATAZT00237535372223.3FeO4.52PERCENT
96ATAZT00237535372223.3Cu<2ppm
97ATAZT00237535372223.3Pb6ppm
98ATAZT00237535372223.3Zn153ppm
99ATAZT00237535372223.3Co67ppm
100ATAZT00237535372223.3Cr283ppm
101ATAZT002375353824.1525.2Cr309ppm
102ATAZT002375353824.1525.2As2ppm
103ATAZT002375353824.1525.2Ni1354ppm
104ATAZT002375353824.1525.2Co61ppm
105ATAZT002375353824.1525.2Pb8ppm
106ATAZT002375353824.1525.2Zn152ppm
107ATAZT002375353824.1525.2Cu2ppm
108ATAZT002375353824.1525.2Ag<1ppm
109ATAZT002375353824.1525.2FeO6.76PERCENT
110ATAZT002375353925.226.25Co61ppm
111ATAZT002375353925.226.25Cr345ppm
112ATAZT002375353925.226.25Ag<1ppm
113ATAZT002375353925.226.25As2ppm
114ATAZT002375353925.226.25FeO755PERCENT
115ATAZT002375353925.226.25Ni1497ppm
116ATAZT002375353925.226.25Pb12ppm
117ATAZT002375353925.226.25Zn139ppm
118ATAZT002375353925.226.25Cu2ppm
119ATAZT002375354026.2531.9Ni1896ppm
120ATAZT002375354026.2531.9FeO3.28PERCENT
121ATAZT002375354026.2531.9As1ppm
122ATAZT002375354026.2531.9Co72ppm
123ATAZT002375354026.2531.9Ag<1ppm
124ATAZT002375354026.2531.9Pb34ppm
125ATAZT002375354026.2531.9Zn174ppm
126ATAZT002375354026.2531.9Cr423ppm
127ATAZT002375354026.2531.9Cu4ppm
128ATAZT002375354131.936As2ppm
129ATAZT002375354131.936Cu<2ppm
130ATAZT002375354131.936Cr411ppm
131ATAZT002375354131.936Ag<1ppm
132ATAZT002375354131.936FeO2.43PERCENT
133ATAZT002375354131.936Ni1896ppm
134ATAZT002375354131.936Pb13ppm
135ATAZT002375354131.936Co57ppm
136ATAZT002375354131.936Zn67ppm
137ATAZT00237535423640FeO2.64PERCENT
138ATAZT00237535423640Cr514ppm
139ATAZT00237535423640Ag<1ppm
140ATAZT00237535423640As3ppm
141ATAZT00237535423640Cu5ppm
142ATAZT00237535423640Ni1782ppm
143ATAZT00237535423640Zn71ppm
144ATAZT00237535423640Pb13ppm
145ATAZT00237535423640Co50ppm
146ATAZT00237535434044Ni2074ppm
147ATAZT00237535434044As3ppm
148ATAZT00237535434044Co51ppm
149ATAZT00237535434044FeO171PERCENT
150ATAZT00237535434044Pb12ppm
151ATAZT00237535434044Zn50ppm
152ATAZT00237535434044Cr391ppm
153ATAZT00237535434044Cu<2ppm
154ATAZT00237535434044Ag<1ppm
155ATAZT00237535444448.3Pb20ppm
156ATAZT00237535444448.3Ag<1ppm
157ATAZT00237535444448.3Cu3ppm
158ATAZT00237535444448.3Co54ppm
159ATAZT00237535444448.3Ni2055ppm
160ATAZT00237535444448.3Zn85ppm
161ATAZT00237535444448.3As3ppm
162ATAZT00237535444448.3FeO2.71PERCENT
163ATAZT00237535444448.3Cr357ppm
164ATAZT002375354548.350.65Zn233ppm
165ATAZT002375354548.350.65Co68ppm
166ATAZT002375354548.350.65FeO4.84PERCENT
167ATAZT002375354548.350.65Ag<1ppm
168ATAZT002375354548.350.65As7ppm
169ATAZT002375354548.350.65Cr286ppm
170ATAZT002375354548.350.65Pb105ppm
171ATAZT002375354548.350.65Ni2218ppm
172ATAZT002375354548.350.65Cu4ppm
173ATAZT00337535463.957.8Cr1466ppm
174ATAZT00337535463.957.8Cu13ppm
175ATAZT00337535463.957.8Ag<1ppm
176ATAZT00337535463.957.8As20ppm
177ATAZT00337535463.957.8Co134ppm
178ATAZT00337535463.957.8Ni10400ppm
179ATAZT00337535463.957.8Pb14ppm
180ATAZT00337535463.957.8Pd<0.05ppm
181ATAZT00337535463.957.8Zn372ppm
182ATAZT00337535463.957.8FeO28.1PERCENT
183ATAZT00337535463.957.8S0.005PERCENT
184ATAZT00337535463.957.8Au<0.005ppm
185ATAZT00337535477.811.7Ni10100ppm
186ATAZT00337535477.811.7S0.005PERCENT
187ATAZT00337535477.811.7Cu13ppm
188ATAZT00337535477.811.7As15ppm
189ATAZT00337535477.811.7Au0.014ppm
190ATAZT00337535477.811.7Co156ppm
191ATAZT00337535477.811.7Pd<0.05ppm
192ATAZT00337535477.811.7Ag<1ppm
193ATAZT00337535477.811.7Zn600ppm
194ATAZT00337535477.811.7Pb69ppm
195ATAZT00337535477.811.7Cr830ppm
196ATAZT00337535477.811.7FeO16.9PERCENT
197ATAZT003375354811.714.4Ni4442ppm
198ATAZT003375354811.714.4Cu4ppm
199ATAZT003375354811.714.4Ag<1ppm
200ATAZT003375354811.714.4As10ppm
201ATAZT003375354811.714.4FeO15.3PERCENT
202ATAZT003375354811.714.4Pb16ppm
203ATAZT003375354811.714.4Zn196ppm
204ATAZT003375354811.714.4Co124ppm
205ATAZT003375354811.714.4Cr487ppm
206ATAZT003375354914.416.7Ni2990ppm
207ATAZT003375354914.416.7Co91ppm
208ATAZT003375354914.416.7FeO20.5PERCENT
209ATAZT003375354914.416.7Ag<1ppm
210ATAZT003375354914.416.7As11ppm
211ATAZT003375354914.416.7Cu3ppm
212ATAZT003375354914.416.7Pb4ppm
213ATAZT003375354914.416.7Cr717ppm
214ATAZT003375354914.416.7Zn157ppm
215ATAZT003375355016.718.95Cu4ppm
216ATAZT003375355016.718.95FeO16.8PERCENT
217ATAZT003375355016.718.95Ag<1ppm
218ATAZT003375355016.718.95Co91ppm
219ATAZT003375355016.718.95Ni2760ppm
220ATAZT003375355016.718.95Pb<3ppm
221ATAZT003375355016.718.95Zn147ppm
222ATAZT003375355016.718.95Cr529ppm
223ATAZT003375355016.718.95As9ppm
224ATAZT003375355118.9522Ni7400ppm
225ATAZT003375355118.9522Ag<1ppm
226ATAZT003375355118.9522As14ppm
227ATAZT003375355118.9522Au0.03ppm
228ATAZT003375355118.9522Cu4ppm
229ATAZT003375355118.9522Cr978ppm
230ATAZT003375355118.9522Pd<0.05ppm
231ATAZT003375355118.9522Zn201ppm
232ATAZT003375355118.9522FeO29.5PERCENT
233ATAZT003375355118.9522S<0.005PERCENT
234ATAZT003375355118.9522Pb<3ppm
235ATAZT003375355118.9522Co115ppm
236ATAZT00337535522224Pb4ppm
237ATAZT00337535522224Cu4ppm
238ATAZT00337535522224As7ppm
239ATAZT00337535522224Zn143ppm
240ATAZT00337535522224Cr537ppm
241ATAZT00337535522224Ni2666ppm
242ATAZT00337535522224Ag<1ppm
243ATAZT00337535522224Co88ppm
244ATAZT00337535522224FeO21.2PERCENT
245ATAZT00337535532426Zn125ppm
246ATAZT00337535532426Ag<1ppm
247ATAZT00337535532426Co87ppm
248ATAZT00337535532426As6ppm
249ATAZT00337535532426Ni2031ppm
250ATAZT00337535532426Pb<3ppm
251ATAZT00337535532426Cu10ppm
252ATAZT00337535532426Cr152ppm
253ATAZT00337535532426FeO137PERCENT
254ATAZT00337535542628As14ppm
255ATAZT00337535542628Co90ppm
256ATAZT00337535542628Pb4ppm
257ATAZT00337535542628Ni1827ppm
258ATAZT00337535542628Cr197ppm
259ATAZT00337535542628Ag<1ppm
260ATAZT00337535542628Zn158ppm
261ATAZT00337535542628Cu4ppm
262ATAZT00337535542628FeO14PERCENT
263ATAZT00337535552830Cu4ppm
264ATAZT00337535552830Pb3ppm
265ATAZT00337535552830Co79ppm
266ATAZT00337535552830Cr217ppm
267ATAZT00337535552830Ag<1ppm
268ATAZT00337535552830Zn132ppm
269ATAZT00337535552830As8ppm
270ATAZT00337535552830FeO12.4PERCENT
271ATAZT00337535552830Ni1518ppm
272ATAZT00337535563032.2As7ppm
273ATAZT00337535563032.2Ag<1ppm
274ATAZT00337535563032.2Cu3ppm
275ATAZT00337535563032.2Zn143ppm
276ATAZT00337535563032.2Co77ppm
277ATAZT00337535563032.2Pb5ppm
278ATAZT00337535563032.2FeO11.6PERCENT
279ATAZT00337535563032.2Ni1566ppm
280ATAZT00337535563032.2Cr605ppm
281ATAZT003375355732.237Zn77ppm
282ATAZT003375355732.237Cu7ppm
283ATAZT003375355732.237As4ppm
284ATAZT003375355732.237Ag<1ppm
285ATAZT003375355732.237FeO1.73PERCENT
286ATAZT003375355732.237Ni630ppm
287ATAZT003375355732.237Pb12ppm
288ATAZT003375355732.237Co22ppm
289ATAZT003375355732.237Cr388ppm
290ATAZT00337535583741Ni796ppm
291ATAZT00337535583741Cr513ppm
292ATAZT00337535583741Ag<1ppm
293ATAZT00337535583741As4ppm
294ATAZT00337535583741FeO2.17PERCENT
295ATAZT00337535583741Pb12ppm
296ATAZT00337535583741Zn88ppm
297ATAZT00337535583741Cu5ppm
298ATAZT00337535583741Co27ppm
299ATAZT00337535594145Co33ppm
300ATAZT00337535594145Ag<1ppm
301ATAZT00337535594145Cr521ppm
302ATAZT00337535594145As4ppm
303ATAZT00337535594145FeO3.62PERCENT
304ATAZT00337535594145Ni826ppm
305ATAZT00337535594145Zn95ppm
306ATAZT00337535594145Pb8ppm
307ATAZT00337535594145Cu5ppm
308ATAZT00337535604549.3As8ppm
309ATAZT00337535604549.3Co77ppm
310ATAZT00337535604549.3Cu4ppm
311ATAZT00337535604549.3Cr623ppm
312ATAZT00337535604549.3Ag<1ppm
313ATAZT00337535604549.3Ni2129ppm
314ATAZT00337535604549.3Pb17ppm
315ATAZT00337535604549.3Zn197ppm
316ATAZT00337535604549.3FeO9.6PERCENT
317ATAZT003375356149.351Zn152ppm
318ATAZT003375356149.351Cr1105ppm
319ATAZT003375356149.351Ag<1ppm
320ATAZT003375356149.351As15ppm
321ATAZT003375356149.351FeO34.9PERCENT
322ATAZT003375356149.351Ni1715ppm
323ATAZT003375356149.351Pb<3ppm
324ATAZT003375356149.351Cu6ppm
325ATAZT003375356149.351Co81ppm
326ATAZT00337535625152.8Ag<1ppm
327ATAZT00337535625152.8Co83ppm
328ATAZT00337535625152.8Cr1839ppm
329ATAZT00337535625152.8As12ppm
330ATAZT00337535625152.8FeO34.5PERCENT
331ATAZT00337535625152.8Ni1281ppm
332ATAZT00337535625152.8Pb<3ppm
333ATAZT00337535625152.8Zn197ppm
334ATAZT00337535625152.8Cu6ppm
335ATAZT003375356352.856Ni1182ppm
336ATAZT003375356352.856Cu4ppm
337ATAZT003375356352.856Ag<1ppm
338ATAZT003375356352.856As8ppm
339ATAZT003375356352.856FeO13.8PERCENT
340ATAZT003375356352.856Pb8ppm
341ATAZT003375356352.856Zn151ppm
342ATAZT003375356352.856Co77ppm
343ATAZT003375356352.856Cr562ppm
344ATAZT00337535645660.25Ag<1ppm
345ATAZT00337535645660.25FeO9.21PERCENT
346ATAZT00337535645660.25Zn175ppm
347ATAZT00337535645660.25Cr510ppm
348ATAZT00337535645660.25Cu2ppm
349ATAZT00337535645660.25Pb10ppm
350ATAZT00337535645660.25Ni1695ppm
351ATAZT00337535645660.25As3ppm
352ATAZT00337535645660.25Co90ppm
353ATAZT003375356560.2563Ni1619ppm
354ATAZT003375356560.2563Cu2ppm
355ATAZT003375356560.2563Ag<1ppm
356ATAZT003375356560.2563As4ppm
357ATAZT003375356560.2563FeO992PERCENT
358ATAZT003375356560.2563Pb14ppm
359ATAZT003375356560.2563Zn168ppm
360ATAZT003375356560.2563Co84ppm
361ATAZT003375356560.2563Cr558ppm
362ATAZT00337535666366.15Cr527ppm
363ATAZT00337535666366.15As15ppm
364ATAZT00337535666366.15Cu14ppm
365ATAZT00337535666366.15Ag<1ppm
366ATAZT00337535666366.15FeO17.2PERCENT
367ATAZT00337535666366.15Ni2150ppm
368ATAZT00337535666366.15Co97ppm
369ATAZT00337535666366.15Pb174ppm
370ATAZT00337535666366.15Zn400ppm
Sheet2
 
Upvote 0
is there an actual list with all possible "elements" in a logic handy order ?
If VBA has to do it, without previous knowledge, the order 'll be a little bit messy.
 
Upvote 0
VBA Code:
Sub Katchap()
     Dim result()
     Set dict = CreateObject("scripting.dictionary")
     dict.comparemode = vbTextCompare

     With Sheets("blad1")                                       'your sheet
          arr = .UsedRange.Value                                'your data
          ReDim result(1 To UBound(arr), 1 To 200)              'prepare an array (oversized)

          For i = 1 To UBound(arr)

               s = Join(Application.Index(arr, i, Array(1, 2, 3, 4, 5)), "|")     'the first 5 columns joined
               If Not dict.exists(s) Then                       'look if this unique key exists already
                    i1 = i1 + 1                                 'index for next unique key
                    dict.Add s, Array(i1, s)                    'add to dictionary
                    For j = 1 To 5: result(i1, j) = arr(i, j): Next     'write first 5 columns to array
               End If
               r = dict(s)(0)                                   'row to be used later

               s = "element:" & arr(i, 6)                       'use "element:" and your element
               If Not dict.exists(s) Then                       'does that key exists already
                    i2 = i2 + 1                                 'index next element
                    dict.Add s, Array(i2, s)                    'add to dictionary
               End If
               k = dict(s)(0) * 2 + 4                           'column to be used later

               result(r, k) = arr(i, 7)                         'fill the amount
               result(r, k + 1) = arr(i, 8)                     'fill the text
          Next

          With .Range("AA1")                                    'range for writing
               .Resize(, 50).EntireColumn.ClearContents         'clear
               .Resize(, 5).Value = Array("Project", "Hole_ID", "Sample Tag", "Depth_From", "Depth_to")     '5 known headers
               a = Application.Index(dict.items, 0, 0)          'read items of the dicitonary
               For i = 1 To UBound(a)                           'loop through them
                    sp = Split(a(i, 2), ":")
                    If sp(0) = "element" Then                   'only those with leading "element" are interesting
                         .Cells(1, 4 + a(i, 1) * 2).Value = sp(1)     'add new element to the header
                    End If
               Next
               With .Offset(1).Resize(i1, 5 + 2 * i2)           'only this size of the oversized array
                    .Value = result
                    .EntireColumn.AutoFit
               End With
          End With
     End With
End Sub

KatChap.xlsm
ZAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZBABBBCBD
1ProjectHole_IDSample TagDepth_FromDepth_toAsCoCrCuFeONiPbZnAgPdSAu
2ATAZT00237535271,2546ppm78ppm386ppm3ppm4,47PERCENT2199ppm17ppm213ppm<1ppm
3ATAZT002375352846,953ppm69ppm277ppm5ppm3,4PERCENT1756ppm14ppm116ppm<1ppm
4ATAZT00237535296,958,29ppm43ppm524ppm4ppm454PERCENT1273ppm7ppm74ppm<1ppm
5ATAZT00237535308,29,958ppm52ppm345ppm2ppm4,14PERCENT1376ppm8ppm131ppm<1ppm
6ATAZT00237535319,9510,711ppm49ppm366ppm2ppm7,49PERCENT1431ppm7ppm112ppm<1ppm
7ATAZT002375353210,714,15ppm57ppm226ppm5ppm4,31PERCENT1631ppm9ppm123ppm<1ppm
8ATAZT002375353314,117,77ppm66ppm205ppm2ppm4,32PERCENT1693ppm7ppm134ppm<1ppm
9ATAZT002375353417,719,84ppm73ppm303ppm2ppm4,61PERCENT1551ppm8ppm158ppm<1ppm
10ATAZT002375353519,821,054ppm58ppm277ppm2ppm3,69PERCENT1391ppm8ppm142ppm<1ppm
11ATAZT002375353621,05226ppm66ppm273ppm2ppm3,94PERCENT1616ppm5ppm145ppm<1ppm
12ATAZT00237535372223,32ppm67ppm283ppm<2ppm4,52PERCENT1579ppm6ppm153ppm<1ppm
13ATAZT002375353824,1525,22ppm61ppm309ppm2ppm6,76PERCENT1354ppm8ppm152ppm<1ppm
14ATAZT002375353925,226,252ppm61ppm345ppm2ppm755PERCENT1497ppm12ppm139ppm<1ppm
15ATAZT002375354026,2531,91ppm72ppm423ppm4ppm3,28PERCENT1896ppm34ppm174ppm<1ppm
16ATAZT002375354131,9362ppm57ppm411ppm<2ppm2,43PERCENT1896ppm13ppm67ppm<1ppm
17ATAZT002375354236403ppm50ppm514ppm5ppm2,64PERCENT1782ppm13ppm71ppm<1ppm
18ATAZT002375354340443ppm51ppm391ppm<2ppm171PERCENT2074ppm12ppm50ppm<1ppm
19ATAZT00237535444448,33ppm54ppm357ppm3ppm2,71PERCENT2055ppm20ppm85ppm<1ppm
20ATAZT002375354548,350,657ppm68ppm286ppm4ppm4,84PERCENT2218ppm105ppm233ppm<1ppm
21ATAZT00337535463,957,820ppm134ppm1466ppm13ppm28,1PERCENT10400ppm14ppm372ppm<1ppm<0,05ppm0,005PERCENT<0,005ppm
22ATAZT00337535477,811,715ppm156ppm830ppm13ppm16,9PERCENT10100ppm69ppm600ppm<1ppm<0,05ppm0,005PERCENT0,014ppm
Blad1
 
Last edited:
Upvote 0
is there an actual list with all possible "elements" in a logic handy order ?
If VBA has to do it, without previous knowledge, the order 'll be a little bit messy.
Yes, there is quite a few possible elements ;

Ag,Al,Al203,As,Au,Ba,Be,Bi,C_Tot,Ca,CaO,Cd,Ce,Co,Cr,Cs,Cu,Dy,Er,Eu,Fe,FeO,Ga,Gd,Hf,Hg,Ho,K,K2O,La,LOI,Lu,Mg,MgO,Mn,MnO,Mo,Na, Na2O,Nb,Nd, Ni, P205,P,Pass75um,Pb,Pd,Pr,Pt,Rb,S,S_Tot,Sb, Sc,Se,SiO2,Sm,Sn,Sr,Ta,Tb,Te,Th,Ti,TiO2,Tl,Tm,U,V,W,WO3,Wt,Y,Yb,Zn,Zr
 
Upvote 0
VBA Code:
Sub Katchap()
     Dim result()

     t = Timer
     Set dict = CreateObject("scripting.dictionary")
     dict.comparemode = vbTextCompare

     '*********************************************************
     'initial known elements in this specific order !!! (without unnecessary spaces)
     '*********************************************************
     sp = Split("Ag,Al,Al203,As,Au,Ba,Be,Bi,C_Tot,Ca,CaO,Cd,Ce,Co,Cr,Cs,Cu,Dy,Er,Eu,Fe,FeO,Ga,Gd,Hf,Hg,Ho,K,K2O,La,LOI,Lu,Mg,MgO,Mn,MnO,Mo,Na,Na2O,Nb,Nd,Ni,P205,P,Pass75um,Pb,Pd,Pr,Pt,Rb,S,S_Tot,Sb, Sc,Se,SiO2,Sm,Sn,Sr,Ta,Tb,Te,Th,Ti,TiO2,Tl,Tm,U,V,W,WO3,Wt,Y,Yb,Zn,Zr", ",")
     For i = 0 To UBound(sp)
          s = "element:" & sp(i)                                'use "element:" and your element
          If Not dict.exists(s) Then                            'does that key exists already
               i2 = i2 + 1                                      'index next element
               dict.Add s, Array(i2, s)                         'add to dictionary
          End If
     Next

     With Sheets("blad1")                                       'your sheet
          arr = .UsedRange.Value                                'your data
          ReDim result(1 To UBound(arr), 1 To 250)              'prepare an array (oversized for approx. 120 elements)

          For i = 1 To UBound(arr)
               If i Mod 100 = 0 Then Application.StatusBar = UBound(arr) & Space(5) & i 'follow the processing in the statusbar
               s = Join(Application.Index(arr, i, Array(1, 2, 3, 4, 5)), "|")     'the first 5 columns joined
               If Not dict.exists(s) Then                       'look if this unique key exists already
                    i1 = i1 + 1                                 'index for next unique key
                    dict.Add s, Array(i1, s)                    'add to dictionary
                    For j = 1 To 5: result(i1, j) = arr(i, j): Next     'write first 5 columns to array
               End If
               r = dict(s)(0)                                   'row to be used later

               s = "element:" & arr(i, 6)                       'use "element:" and your element
               If Not dict.exists(s) Then                       'does that key exists already
                    i2 = i2 + 1                                 'index next element
                    dict.Add s, Array(i2, s)                    'add to dictionary
               End If
               k = dict(s)(0) * 2 + 4                           'column to be used later

               result(r, k) = arr(i, 7)                         'fill the amount
               result(r, k + 1) = arr(i, 8)                     'fill the text
          Next

          t1 = Timer
          Application.StatusBar = "writing to worksheet"
          Application.ScreenUpdating = False
          
          With .Range("AA1")                                    'range for writing
               With .Resize(, 250).EntireColumn
                    .ClearContents                              'clear
                    .Hidden = False
               End With

               .Resize(, 5).Value = Array("Project", "Hole_ID", "Sample Tag", "Depth_From", "Depth_to")     '5 known headers
               a = Application.Index(dict.items, 0, 0)          'read items of the dicitonary
               For i = 1 To UBound(a)                           'loop through them
                    sp = Split(a(i, 2), ":")
                    If sp(0) = "element" Then                   'only those with leading "element" are interesting
                         .Cells(1, 4 + a(i, 1) * 2).Value = sp(1)     'add new element to the header
                    End If
               Next

               .Offset(1).Resize(i1, 5 + 2 * i2).Value = result     'only this size of the oversized array

               For i = 1 To i2                                  'loop through them
                    With .Cells(2, 4 + i * 2).Resize(, 2)
                         b = (WorksheetFunction.CountA(.Resize(i1)) = 0)     'check if those columns are empty
                         If b Then
                              .EntireColumn.Hidden = (WorksheetFunction.CountA(.Resize(i1)) = 0)
                         Else
                              With .Offset(-1).Resize(i1 + 1)
                                   .EntireColumn.AutoFit
                                   For Each side In Array(xlEdgeLeft, xlEdgeRight)
                                        With .Borders(side)
                                             .LineStyle = xlContinuous
                                             .Weight = xlHairline
                                        End With
                                   Next
                              End With
                         End If
                    End With
               Next
          End With
     End With

     t2 = Timer
     Application.StatusBar = ""
     'MsgBox "writing : " & t2 - t1 & vbLf & "collecting : " & t1 - t
End Sub
KatChap.xlsm
AAABACADAEAFAGALAMANAOBFBGBHBIBLBMBVBWDJDKDRDSDTDUEBECFXFY
1ProjectHole_IDSample TagDepth_FromDepth_toAgAsAuCoCrCuFeONiPbPdSZn
2ATAZT00237535271,254<1ppm6ppm78ppm386ppm3ppm4,47PERCENT2199ppm17ppm213ppm
3ATAZT002375352846,95<1ppm3ppm69ppm277ppm5ppm3,4PERCENT1756ppm14ppm116ppm
4ATAZT00237535296,958,2<1ppm9ppm43ppm524ppm4ppm454PERCENT1273ppm7ppm74ppm
5ATAZT00237535308,29,95<1ppm8ppm52ppm345ppm2ppm4,14PERCENT1376ppm8ppm131ppm
6ATAZT00237535319,9510,7<1ppm11ppm49ppm366ppm2ppm7,49PERCENT1431ppm7ppm112ppm
7ATAZT002375353210,714,1<1ppm5ppm57ppm226ppm5ppm4,31PERCENT1631ppm9ppm123ppm
8ATAZT002375353314,117,7<1ppm7ppm66ppm205ppm2ppm4,32PERCENT1693ppm7ppm134ppm
9ATAZT002375353417,719,8<1ppm4ppm73ppm303ppm2ppm4,61PERCENT1551ppm8ppm158ppm
Blad1
 
Upvote 0
Solution
I seem to be having trouble getting this to work- I have changed to reflect my Sheet/Data however it appears to run with no errors then doesn't produce the changes. I originally thought it may because my dataset was so large (118,000) however when I cut it down the same issue. My my VBA skills must be rusty.
 
Upvote 0
I seem to be having trouble getting this to work- I have changed to reflect my Sheet/Data however it appears to run with no errors then doesn't produce the changes. I originally thought it may because my dataset was so large (118,000) however when I cut it down the same issue. My my VBA skills must be rusty.
Sorted it- Fabulous , thank you so much for the script:)
 
Upvote 0

Forum statistics

Threads
1,203,521
Messages
6,055,885
Members
444,830
Latest member
Excelsmallbusinessmom

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top