How to transpose this data in Google Sheets - google-sheets

I have data in google sheet I just want to fetch that data in my other sheet but in transpose
Here is ex:
Column A | Column B | Column C
=================================
site1.com | Name 1 | Name 2
site2.com | Name 3 | Name 4
site3.com | Name 5 | Name 6
Want to data like this
Column A | Column B | Column C
=================================
site1.com | site2.com | site3.com
Name 1 | Name 3 | Name 5
Name 2 | Name 4 | Name 6
I don't want to enter formula manually in every row so is arryformula can do this automatic.
I'm trying this but not able to what I want.
=ARRAYFORMULA(TRANSPOSE(Sheet1!$B2:B300 & Sheet1!$L2:L300))

try:
=ARRAYFORMULA({TRANSPOSE(SORT(FILTER(A:A, A:A<>"")));
SUBSTITUTE(TRANSPOSE(SPLIT(TRANSPOSE(QUERY(TRANSPOSE(
IF(ISNUMBER(QUERY(QUERY({A:B; A:A, C:C},
"select count(Col1) where Col1 is not null group by Col1 pivot Col2"),
"offset 1", 0)), SUBSTITUTE(QUERY(QUERY({A:B; A:A, C:C},
"select count(Col1) where Col1 is not null group by Col1 pivot Col2"),
"limit 0"), " ", "♦"), )),,999^99)), " ")), "♦" , " ")})

or you can do just:
=TRANSPOSE(A1:C3)
or:
=TRANSPOSE(INDIRECT("A1:C"&COUNTA(A:A)))
UPDATE:
=QUERY(TRANSPOSE(INDIRECT("Sheet1!A2:L"&COUNTA(Sheet1!A2:A)+1)), "offset 1")

Related

Combine duplicate rows in column as comma separated values - Google Query

If i have 2 columns viz., ID & Name, ID column containing duplicates, and if i want to group by ID to get unique ID's but name column should be a comma-separated list, can this be possible in Google Query?
| ID | Name |
===============
| 1001 | abc |
---------------
| 1001 | def |
---------------
| 1002 | kjg |
---------------
| 1003 | aof |
---------------
| 1003 | lmi |
---------------
| 1004 | xyz |
---------------
into
| ID | Name |
====================
| 1001 | abc, def |
--------------------
| 1002 | kjg |
--------------------
| 1003 | aof, lmi |
--------------------
| 1004 | xyz |
--------------------
try:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col2)
where Col1 is not null
group by Col1
pivot Col3"),
"select Col1
offset 1", 0), REGEXREPLACE(TRIM(
TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({A2:B&",", B2:B},
"select max(Col2)
where Col1 is not null
and Col2 <> ','
group by Col1
pivot Col3"),
"offset 1", 0)),,999^9))), ",$", )})
however, this may not work for massive datasets due to TRIM (which is needed to remove empty spaces) and REGEXREPLACE (which is needed to remove the end comma) limitations. otherwise, without it, the formula can handle anything:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col2)
where Col1 is not null
group by Col1
pivot Col3"),
"select Col1
offset 1", 0),
TRANSPOSE(QUERY(TRANSPOSE(QUERY(QUERY({A2:B&",", B2:B},
"select max(Col2)
where Col1 is not null
and Col2 <> ','
group by Col1
pivot Col3"),
"offset 1", 0)),,999^9))})
I looked through Query specification. I could not find a solution. So I made some formulas that do the job (because I found this task interesting).
D2 contains =unique(a2:a)
E2 contains =join(", ",transpose(filter($B$2:$B,$A$2:$A=D2)))and it's copied down.
I had to copy formulas down (far from beautiful formula)
Hope you find it helpful.
Reference
UNIQUE
JOIN
TRANSPOSE
FILTER
Here is an answer using QUERY.
=ARRAYFORMULA(REGEXREPLACE(TRIM(SPLIT(TRANSPOSE(SPLIT(
CONCATENATE(TRANSPOSE(QUERY({"♦"&A2:A&"♠", B2:B&", "},
"select max(Col2) where Col2 is not null group by Col2 pivot Col1", 0))),
"♦")), "♠")), ",$", ))
This comes directly from this question.
Player0 has answers with just amazing formulas that are able to reorganise data in a huge variety of ways.
if you could live with the end-comma present in the output you can try:
=ARRAYFORMULA({QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"select Col1 offset 1", 0),
TRANSPOSE(QUERY(TRANSPOSE(IFERROR(VLOOKUP(QUERY(QUERY({A2:B, B2:B},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"select Col1 offset 1", 0),
QUERY(QUERY({A2:B, B2:B&","},
"select Col1,max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"offset 1", 0),
SPLIT(TRANSPOSE(QUERY(TRANSPOSE(IF(QUERY(QUERY({A2:B, B2:B&","},
"select max(Col3)
where Col1 is not null
and Col3 <> ','
group by Col1
pivot Col2"),
"offset 1", 0)="",,COLUMN(B2:XXX)&",")),,999^99)), ","), 0))),,999^99))})
(tho this was never tested on an ultra-massive dataset but in theory, it should handle anything too)

Concatenate list of IDs based on matching IDs within a comma separated list in a different column

Using google sheets:
I've got two columns.
Column A is a list of ID numbers:
N1
N2
N3
N4
N5
Column B is a comma separated list of other ID numbers within column A related to the ID number on that same row:
N2,N3
N3,N4
(null)
(null)
N1
I'm trying to make a formula in a third column, column C, that will display a comma separated list of the ID numbers from column A that match the ID numbers entered entered in Column B.
Intended result:
A | B | C
N1 | N2,N3 | N4,N5
N2 | N3,N4 | N1
N3 | (null) | N1,N2
N4 | N1 | N2
N5 | N1 | (null)
The closest I could get was this formula here:
=arrayFormula({concatenate(rept(A:A&",",B:B=A2))})
But this will only work if multiple items haven't been entered into column B, so using this only "N4,N5" would be returned in column C rather than the rest shown in the intended result.
Edit(updated Image): I'm now seeing the following, seems there's an error somewhere:
try like this:
=ARRAYFORMULA(IFERROR(VLOOKUP(A1:A,
{QUERY(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(IFERROR(SPLIT(B1:B, ","))<>"", "♦"&SPLIT(B1:B, ",")&"♠"&A1:A, ))
,,999^99)),,999^99), "♦"))), "♠"),
"select Col1,count(Col1) group by Col1 pivot Col2"), "select Col1 offset 1", 0),
SUBSTITUTE(REGEXREPLACE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IF(ISNUMBER(
QUERY(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(IFERROR(SPLIT(B1:B, ","))<>"", "♦"&SPLIT(B1:B, ",")&"♠"&A1:A, ))
,,999^99)),,999^99), "♦"))), "♠"),
"select count(Col1) group by Col1 pivot Col2"), "offset 1", 0)),
QUERY(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(IFERROR(SPLIT(B1:B, ","))<>"", "♦"&SPLIT(B1:B, ",")&"♠"&A1:A, ))
,,999^99)),,999^99), "♦"))), "♠"),
"select count(Col1) group by Col1 pivot Col2"), "limit 0", 1)&",", ))
,,999^99))), ",$", ), ", ", ",")}, 2, 0)))

How can I get all non-empty columns and their contents?

I would like to know how I can filter out empty columns when using data from one part of the sheet in another without having to specify each column name since more columns can be added.
I found this site and tried out the formula there but that seems like sometimes it will include the column (meaning it has a non-empty value) but then it does not include that value so the column looks blank but shouldn't be.
=ArrayFormula(Query(transpose(Query(TRANSPOSE({Query({'Test Data'!A1:Z1;Query({if('Test Data'!A2:Z<>"",1,0)},"Select "&JOIN(",","Sum(Col"&column('Test Data'!A1:Z1)&")"))},"Offset 1",1);'Test Data'!A2:Z}),"Select * Where Col2>0")),"Select * Offset 1",1))
I currently have this:
| | english | math | science |
|:-----------|------------:|:------------:|:-----------:|
| 8:30 | bob,jill | | |
| 9:40 | | | |
| 10:15 | | | mike |
I would like it to this (its okay for a row to be empty):
| | english | science |
|:-----------|------------:|:-----------:|
| 8:30 | bob,jill | |
| 9:40 | | |
| 10:15 | | mike |
any help would be appreciated.
the best way of doing this would be to re-pivot it again like:
=ARRAYFORMULA(QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:Z<>"", B2:Z, "♥")&"♦"&B1:Z1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3"))
if you want to keep all times you will need:
=ARRAYFORMULA({QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3 limit 0");
{A2:A, IFERROR(VLOOKUP(A2:A, QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3"),
TRANSPOSE(ROW(INDIRECT("A2:A"&COLUMNS(QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3 limit 0"))))), 0))}})

Merge 2 columns into one via adding a new row in Google Sheets

Which formula can I use to achieve this in Google Sheets?
From:
Column 1 | Column 2
1 | 2
3 | 4
to:
1
2
3
4
=ARRAYFORMULA(QUERY(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(IF(A:B<>"", A:B&"♦", ))
,,999^99)),,999^99), "♦")), "where Col1 is not null"))
=ARRAYFORMULA(QUERY(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(A:B<>"", A:B&"♦ ♦", )),,999^99)),,999^99), "♦")), "limit "&COUNTA(A:B)*2-1))
Generally speaking, the formula you want to use is:
=transpose(split(A1, " | "))
Where A1 contains the text 1 | 2.
Try out this formula
=SORT({A:A;B:B})

Counting number of columns a value appears in (Google Sheets)

I have a Google Sheet where I want to know the number of unique columns that a value appears in. For example, given the following sheet:
| A | B | C | D |
+-------+-------+-------+-------+
| Joe | Lisa | Lisa | Lisa |
| Joe | Lisa | Jenny | Lisa |
| Joe | Jenny | Jenny | John |
| Joe | Jenny | Katie | John |
| Joe | Jenny | Katie | John |
I would want something that counts Joe appearing in 1 column, Lisa appearing in 3, Jenny appearing in 2, Katie appearing in 1, and John appearing in one, i.e.
| Name | Count |
+-------+-------+
| Joe | 1 |
| Lisa | 3 |
| Jenny | 2 |
| Katie | 1 |
| John | 1 |
What's the best way to do this?
Assuming the data has no spaces in it, try:
=ArrayFormula(QUERY(SPLIT(UNIQUE(TRANSPOSE(SPLIT(JOIN(" ", QUERY(A1:D&"_"&COLUMN(A1:D1),,ROWS(A1:A)))," "))), "_"), "Select Col1, count(Col2) where Col2 > 0 group by Col1 label count(Col2)''"))
If the source data has spaces, try:
=ArrayFormula(SUBSTITUTE(QUERY(SPLIT(UNIQUE(TRANSPOSE(SPLIT(JOIN(" ", QUERY(SUBSTITUTE(A1:D, " ", "~")&"_"&COLUMN(A1:D1),,ROWS(A1:A)))," "))), "_"), "Select Col1, count(Col2) where Col2 > 0 group by Col1 label count(Col2)''"), "~", " "))
EDIT
As Tom has noticed, I've missed the task, and the correct formula is:
=QUERY(
QUERY(
{TRANSPOSE(SPLIT(TEXTJOIN("#",1,FILTER(COLUMN(A:D)*row(A:D)^0,A:A<>"")),"#")),
TRANSPOSE(SPLIT(TEXTJOIN("#",1,A:D),"#"))},
"select Col1, Col2, count(Col2) group by Col1, Col2"),
"select Col2, count(Col3) group by Col2 label Col2 'Name',count(Col3) 'Count'")
Credit: #tom-sharpe
My original formula counted max times name is in a row:
=QUERY(
QUERY(
{TRANSPOSE(SPLIT(TEXTJOIN("#",1,FILTER(COLUMN(A:D)^0*row(A:D),A:A<>"")),"#")),
TRANSPOSE(SPLIT(TEXTJOIN("#",1,A:D),"#"))},
"select Col1, Col2, count(Col2) group by Col1, Col2"),
"select Col2, max(Col3) group by Col2 label Col2 'Name'")

Resources